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
