Me pareció interesante la propuesta que mostró explorer, así que decidí hacerle una comparación con la mia, usando el módulo
Benchmark.
El código que utilicé es el siguiente:
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict
;
use Benchmark
qw(:all
) ;
my $directorio = '/home/dir/test/';
my $count;
cmpthese
($count, {
'kidd' => \&kidd,
'explorer' => \&explorer,
});
sub kidd
{
opendir DIR
, $directorio or die "Cannot open $directorio: $!";
my @files = map { $_->[1
] }
sort { $a->[0
] <=> $b->[0
] }
map { [ -f
$directorio.$_, $_ ] }
readdir DIR
;
closedir DIR
;
}
sub explorer
{
my @ficheros;
opendir(DIR
, $directorio) or die "ug!";
while ( my $file = readdir DIR
) {
unshift @ficheros, $file if -d
"$directorio/$file";
push @ficheros, $file if -f _
;
}
closedir DIR
;
}Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Antes de empezar, el resultado que yo esperaba es que la solución de explorer fuera más lenta por el costo de estar haciendo el push() y el unshift() pues el resto es básicamente lo mismo.
Aquí están los resultados:
- Código: Seleccionar todo
Rate kidd explorer
kidd 168/s -- -5%
explorer 177/s 5% --
Rate kidd explorer
kidd 168/s -- -6%
explorer 178/s 6% --
Rate kidd explorer
kidd 169/s -- -5%
explorer 178/s 5% --
Así que estaba equivocado, realmente es poca la diferencia que hay entre los dos. Pero de nuevo, depende del tamaño de tu directorio, pues entre más archivos, más incrementa la diferencia de velocidad.
Saludos