Quel module pour die et warn ?

Quel module pour die et warn ? - Perl - Programmation

Marsh Posté le 03-08-2007 à 10:58:11    

Bonjour,
 
J'ai un souci en tentant d'appeler 2 "built-in" fonctions de Perl -- die et warn -- via une référence de fonction.
Voici le code :
 

Code :
  1. #-------------------------------------------------------#
  2. # Subroutine close_s
  3. #
  4. # Safe version of close for lazy bums...
  5. #
  6. # @param  Filehandle
  7. # @param  Error level: warn (default value) or die
  8. # @return Return value of close
  9. #-------------------------------------------------------#
  10. sub close_s ( *;$ )
  11.   {
  12.     # Check filehandle parameter
  13.     my $FILEHANDLE = shift
  14.       or die 'close_s: filehandle required';
  15.     # Set error level:
  16.     # - warning (default behavior)
  17.     my $error_cmd = \&warn;
  18.     # - exception
  19.     $error_cmd = \&die
  20.       if $_ = shift and /^die$/i;
  21.     my $value = close $FILEHANDLE
  22.       or &$error_cmd( $!
  23.        ? "Can't close $FILEHANDLE: $!"
  24.        : "Exit status $? from closing $FILEHANDLE" );
  25.     return $value;
  26.   }
  27. close_s( TEST );


 
J'ai le message d'erreur suivant :
 

Undefined subroutine &main::warn called at ./batch.pl line 73.


 
Donc la question est : dans quel module sont définis warn et die pour que je puisse les appeler correctement ?

Reply

Marsh Posté le 03-08-2007 à 10:58:11   

Reply

Marsh Posté le 03-08-2007 à 11:07:47    

Pas de module pour die et pour warn : http://perldoc.perl.org/functions/warn.html

 

Par contre je ne suis pas sûr que tu puisses utiliser des références sur des fonctions internes.
Je te propose de les encapsuler dans des fonctions anonymes, plutôt.


Message édité par Elmoricq le 03-08-2007 à 11:08:49
Reply

Marsh Posté le 04-08-2007 à 11:47:32    

Merci pour ta réponse. Je vais essayer avec les fonctions anonymes dans ce cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed