FILEHANDLE,SCALAR,LENGTH,OFFSET
lee desde el fichero FILEHANDLE
un número
de LENGTH
caracteres en la variable SCALAR
.
Devuelve el número de caracteres leídos, 0 si es el final de fichero
y undef
si hubo un error. Es posible indicar que
el fichero usado es binario mediante la función
binmode (línea 7 en el ejemplo que sigue):
lhp@nereida:~/Lperl/src$ cat -n binaryfiles.pl 1 #!/usr/bin/perl -w 2 use strict; 3 my $buffer = ""; 4 my $file = shift; 5 6 open(FILE, "< $file"); 7 binmode(FILE); 8 my $s = -s $file; 9 read(FILE, $buffer, $s); 10 close(FILE); 11 12 open(FILE, "> $file.sal"); 13 syswrite(FILE, $buffer, $s); 14 close(FILE); 15 16 my $c; 17 foreach (split(//, $buffer)) { 18 printf("%02x ", ord($_)); 19 print "\n" unless ++$c % 20; 20 } 21 print "\n";La salida de la ejecución nos permite comprobar que la copia de un ejecutable
a.out
preserva el formato binario:
lhp@nereida:~/Lperl/src$ ./binaryfiles.pl a.out | head -3 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 02 00 03 00 01 00 00 00 e0 82 04 08 34 00 00 00 f4 0d 00 00 00 00 00 00 34 00 20 00 07 00 28 00 22 00 1f 00 06 00 00 00 34 00 00 00 lhp@nereida:~/Lperl/src$ ls -ltr | tail -2 -rwxr-xr-x 1 lhp lhp 341 2006-06-21 18:00 binaryfiles.pl -rw-r--r-- 1 lhp lhp 6969 2006-06-21 18:02 a.out.sal lhp@nereida:~/Lperl/src$ chmod a+x a.out.sal; ./a.out.sal hello world! lhp@nereida:~/Lperl/src$ ./a.out hello world! lhp@nereida:~/Lperl/src$
Casiano Rodríguez León