El siguiente ejemplo ordena los usuarios de un sistema unix atendiendo a su
uid
:
lhp@nereida:~/projects/perl/src$ cat -n sortperuid.pl 1 #!/usr/bin/perl -w 2 use strict; 3 my @user = grep { $_ !~ /^#/ } `cat /etc/passwd`; 4 my (@name, @uid, $x); 5 6 for (my $i=0; $i < @user; $i++) { 7 ($name[$i], $x, $uid[$i]) = split ':', $user[$i]; 8 } 9 10 @name = @name[ 11 sort {$uid[$a] <=> $uid[$b]} 0..$#name 12 ]; 13 14 local $" = "\n"; 15 print "@name\n";En la línea 3 se obtiene en
@user
la lísta de líneas
no comentadas en /etc/passwd
.
en las líneas 6-8 se inicializan los arrays @name
y @uid
a los nombres (login) y uid de los usuarios
(campos primero y tercero de /etc/passwd
).
Las líneas 10-12 ordenan primero la lista 0..$#name
de acuerdo con el
valor de uid
. El nuevo conjunto ordenado de índices es utilizado para
reindexar el array name
.
El operador sort
en un contexto escalar devuelve undef
.
Casiano Rodríguez León