El operador reverse toma los elementos de una lista y devuelve la lista en orden inverso:
DB<1> @a = 1..10 DB<2> @a = reverse @a DB<3> p "@a" 10 9 8 7 6 5 4 3 2 1
En un contexto escalar, cuando reverse
es aplicado a una lista devuelve la cadena
resultante de concatenar los elementos de la lista en orden
inverso:
DB<6> @a = 1..10 DB<7> $b = reverse @a DB<8> p $b 01987654321 DB<9> @a = qw{one two three} DB<10> $x = reverse @a DB<11> p $x eerhtowteno
Si se aplica a una cadena en un contexto escalar produce la recíproca de la cadena:
DB<29> q lhp@nereida:~/public_html/cgi-bin$ perl -wde 0 main::(-e:1): 0 DB<1> $a = "dabale arroz a la zorra el abad" DB<2> p scalar(reverse($a)) daba le arroz al a zorra elabad
Sin embargo, en un contexto de lista la cadena queda sin modificar:
DB<3> p reverse($a) dabale arroz a la zorra el abad
Tenga cuidado si esta trabajando en un entorno que usa UTF-8. En ese caso reverse puede producir un resultado erróneo:
lhp@nereida:~/Lperl/src$ perl -we 'print reverse("dábale arroz a la zorra el abad")."\n"' daba le arroz al a zorra elab##d
Para solucionarlo es necesario usar el
módulo utf8 y poner el fichero de salida en modo
:utf8
:
lhp@nereida:~/Lperl/src$ cat -n reverse.pl 1 #!/usr/local/bin/perl -w 2 use strict; 3 use warnings; 4 use utf8; 5 binmode STDOUT, ':utf8'; 6 my $x = shift || "dábale arroz a la zorra el abad"; 7 print reverse($x)."\n"; # Contexto escalar forzado por el "."Cuando se ejecuta se obtiene:
lhp@nereida:~/Lperl/src$ reverse.pl daba le arroz al a zorra elabád
Casiano Rodríguez León