• Publicidad

Variables especiales $! y $@

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Variables especiales $! y $@

Notapor newperlero » 2011-08-19 01:56 @122

Hola,

He leído acerca de las variables especiales $! y $@. En su tiempo me recomendaron que las usara en ciertas líneas, por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open FILE, <, 'fich.txt' ||die "$!"
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero el resultado de poner la variable o no, es el mismo, no muestra nada por pantalla.
Para obtener el error tengo que hacer un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $!;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y en el caso de $@, ni siquiera así.
¿Para que se suele usar esta variable?
Me refiero, un ejemplo practico.

¡Gracias!

Saludos
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318

Publicidad

Re: Variables especiales $! y $@

Notapor explorer » 2011-08-19 09:42 @446

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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #! /usr/bin/perl
  2.  
  3. eval q(
  4.     no warnings 'all';
  5.     $x = 'lozana andaluza';
  6.     for ($x 0 .. 23 ) {}
  7. );
  8.  
  9. if ($@) {
  10.     print "ERROR: $@ \n";
  11. }
  12.  
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:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@casa:~/Documentos/Desarrollo> perl -c kk.pl
  2. kk.pl syntax OK
  3. explorer@casa:~/Documentos/Desarrollo> perl kk.pl
  4. ERROR: syntax error at (eval 1) line 4, near "$x 0"
  5.  
  6.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Tienes más ejemplos en perldoc -f eval.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Variables especiales $! y $@

Notapor newperlero » 2011-08-22 02:24 @141

¡Gracias por la aclaración!
newperlero
Perlero nuevo
Perlero nuevo
 
Mensajes: 42
Registrado: 2011-07-15 06:38 @318


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron