El operador sort
toma una lista de valores y los ordena según el alfabeto ASCII.
Por ejemplo:
@rocks = qw/ bedrocks slate rubble granite /; @sorted = sort (@rocks); # bedrocks granite rubble slateEl operador sort de Perl utiliza los operadores de cadenas por defecto.
:~/perl/src> perl -de 0 Loading DB routines from perl5db.pl version 1.19 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. main::(-e:1): 0 DB<1> print "a" == "b" 1 DB<2> @x = sort (10, 2); DB<3> p "@x" 10 2
Se le puede pasar como primer argumento un bloque que determina la función de comparación.
dicho bloque depende de dos variables ``muertas'' a
y b
.
El valor retornado por el bloque (que deberá ser -1, 0 ó 1) es utilizado como elemento de comparación.
Por ejemplo:
> cat sortbynumber.pl #!/usr/bin/perl -w @a = (4, 7, 9, 12, -1); @a = sort { $a <=> $b, } @a; print "\@a = @a\n"; nereida:~/perl/src> sortbynumber.pl @a = -1 4 7 9 12
El siguiente ejemplo ordena primero la lista 0..$#name
de acuerdo con el
array @uid
. El nuevo conjunto ordenado de índices es utilizado para
producir una reordenación del array name
conteniendo los nombres de
usuario:
#!/usr/bin/perl -w my @user = `cat /etc/passwd`; my (@name, @uid); my $x; for ($i=0; $i < @user; $i++) { ($name[$i], $x, $uid[$i]) = split ':', $user[$i]; } @name = @name[ sort {$uid[$a] <=> $uid[$b]} 0..$#name ]; print "@name\n";
El operador sort
en un contexto escalar devuelve undef
.