Ficheros y directorios

Post on 13-Jun-2015

471 views 1 download

Tags:

description

Presentación sobre ficheros y directorios en Perl para el curso Perl desde zero.

transcript

Ficheros y Directorios

Curso Perl desde zeroNov 2012

Jose Luis MartínezBarcelona.pm

El sistema de ficheros!

Como abro un fichero?open (my $fh, ???, $filename);

Para leeropen (my $fh, “<“, $filename);

Para para escribiropen (my $fh, “>“, $filename);

Y como leo?open (my $fh, “<“, $filename);while (my $line = <$fh>) { chomp $line; …}

Y como leo?open (my $fh, “<“, $filename);while (my $line = <$fh>) { chomp $line; …}

Y como escribo?open (my $fh, “>“, $filename);foreach my $line (@array_with_lines) { print $fh “$line\n”;}

Y como escribo?open (my $fh, “>“, $filename);foreach my $line (@array_with_lines) { print $fh “$line\n”;}

Te suena?• < LEER• > ESCRIBIR (Cuidado! Crea un fichero nuevo o vacía

el que existe)• >> ESCRIBIR AL FINAL• +< LEER Y ESCRIBIR• +> ESCRIBIR (ah!... Y querré leer) (Vacía el

fichero )

Y si te suena tanto…• | PIPE

• |-open (my $fh, “|-”, “text2img –png –output

file.png”);print $fh “Texto mega-chulo”;• -|open (my $fh, “-|”, “md5sum $fichero”);my $md5 = <$fh>; # <- El md5sum del fichero!!!

Cada vez que haces pipe a un programa para hacer algo que ya sabe hacer Perl, Dios mata a un gatito.

Consulta CPAN para salvar a los gatitos

Gracias por no hacerlo

Rizando el rizo• -|- Quiero escribir a un programa, y recoger su salida

en una variable.

Rizando el rizo• -|- Quiero escribir a un programa, y recoger su salida

en una variable.

Ver: man perlipc

Ya estoyclose ($fh);

Haciéndolo mejor

open (my $fh, “>“, $filename) or die “Error: $!”;while (…) { print $fh $line or die “Error writing: $!”; …}close($fh) or die “Error closing: $!”;

Haciéndolo (aún) mejoruse autodie;open (my $fh, “>“, $filename);while (…) { print $fh $line; …}close($fh);

Más variado

Haciéndolo más variado

• ¿Tengo que leer línea a línea?read($fh, $var, 10);

• $/ (INPUT_RECORD_SEPARATOR){ local $/ = “a”; $record = <$fh>; }

• seek– Moverte por un fichero

Operadores unarios

Operadores unarios

[…]-e File exists. -z File has zero size (is empty). -s File has nonzero size (returns size in bytes). -f File is a plain file. -d File is a directory. -l File is a symbolic link.[…]

Operadores unariosif (-d $file) { inspect_dir($file);} elsif (-f $file){ process_file($file);}

¿Y qué pasa con los directorios?opendir(my $dh, $some_dir) || die "can't opendir

$some_dir: $!";@dot_files = grep { /^\./ && -f "$some_dir/$_" }

readdir($dh);closedir $dh;