Hay un error en la escritura de la línea. Lo correcto es:
open FILE, '<', 'fich.txt' || die "$!";aunque yo prefiero escribirlo así:
open my $FILE, q[<], 'fich.txt' or die "ERROR: No puedo abrir el fichero en lectura: $!\n";El mensaje de error solo sale si, efectivamente, se produce un error. Si no, no. (La presencia de un "\n" al final del die() también es importante. Más información en
perldoc -f die.)
De todas maneras, desde hace unos años, en la llamada corriente de programación "Modern Perl", se recomienda el uso de "autodie", que se encarga de hacer un die() en caso de que ocurra un fallo en el open(), read(), write(), <>, y close():
use autodie;
open my $FILE, q[<], 'fich.txt';
#...
close $FILE;
En cuanto a $@, almacena el mensaje de error de la última instrucción eval() ejecutada. Lo mismo que antes: si no se produjo ningún error, no contendrá nada. Más en concreto: contendrá un mensaje de error en caso de que el argumento a la instrucción eval() no haya podido ser analizada como código Perl y/o no haya podido ser ejecutada. El código podría fallar por un problema de lógica en la programación, naturalmente, pero si se puede ejecutar, no sacará ningún mensaje de error.
Un ejemplo:
Using perl Syntax Highlighting
#! /usr/bin/perl
eval q(
no warnings 'all';
$x = 'lozana andaluza';
for ($x 0 .. 23 ) {}
);
if ($@) {
print "ERROR: $@ \n";
}
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Este programa compila bien (es un programa legal), pero a la hora de ejecutarlo, eval() captura un error de sintaxis, indicando que el código Perl que hay en su interior, no está bien escrito, y no se puede ejecutar:
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perl -c kk.pl
kk.pl syntax OK
explorer@casa:~/Documentos/Desarrollo> perl kk.pl
ERROR: syntax error at (eval 1) line 4, near "$x 0"
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Tienes más ejemplos en
perldoc -f eval.