miércoles, 5 de febrero de 2014

Como listar archivos con filtrado en Perl

En esta ocasion vamos a aprender como listar los archivos de un directorio con filtrado de extension,por ejemplo listar los .txt,los .png,etc.

En perl las cosas se pueden hacer de muchas maneras,así que vamos a ver algunas(no todas),pero las que me gustan o conozco:

En todos los ejemplos,el array @archivos contendrá los archivos filtrados,este sera el que pueden usar para lo que necesiten.


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
use feature 'switch'; # Usamos switch

my $dir = "."; # . hace referencia al directorio actual

my @archivos;

 opendir(my $recorrer, $dir) || die "Error :( $! \n";  # recorrer es el filehandle
    while(readdir $recorrer){  # Leemos el directorio
        if (-f $dir . "/" . $_) { # Vemos si es un fichero
            given ($_) { 
                when (/.*jpg/) { # Elegimos la extension
                     push (@archivos, $_); # Añadimos al array el archivo
                }
                when (/.*jpeg/) { # Elegimos otra(si queremos)
                    push (@archivos, $_);
                }
            }
        } 
    }
    closedir $recorrer;  # Cerramos el directorio

Bien ese es que yo uso mas,es un poco a lo Java,pero me gusta que se vea mucho codigo,aunque luego me dicen que mientra menos mejor,y en perl eso es muy simple.

Bien ahora una forma mas sencilla,usando glob al estilo python,glob es similar a los pipes de Unix:

my @arr = glob("*.jpg");

Así de sencillo,aquí el problema es para añadir mas,podemos hacer esto si quisieramos tambien los .jpeg.


1
2
3
4
foreach (glob("*.jpeg")) 
{
   push (@archivos, $_);
}

Bien,ahora una manera aun mas sencilla:

my @arr = <*.jpg>;
De igual manera si queremos añadir mas:


1
2
3
4
foreach (<*.jpeg>)) 
{
   push (@archivos, $_);
}

Si queremos usar un directorio en especifico lo especificamos antes:

my @archivos = ;

Ahora por ejemplo para mostrar en pantalla:


1
2
3
4
5
6
7
use feature 'say';

my @archivos = <*.pl>;

foreach (@archivos) {    
    say $_;
}


Eso es todo.

No hay comentarios.:

Publicar un comentario

Los comentarios serán revisados antes de ser publicados.