Date post: | 13-Jun-2015 |
Category: |
Documents |
Upload: | jose-luis-martinez |
View: | 471 times |
Download: | 1 times |
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;