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
