in reply to Re: File Handle questions
in thread File Handle questions

It looks like autodie is a very good idea. Can you give me an example how I can use my function (for logging) with autodie as I do it with die?

With die:

unlink $filename or die LOG_MSG($par_lglvl,3,"DOUPGRADE","Could not de +lete $filename: $!");
Thanks.

Replies are listed 'Best First'.
Re^3: File Handle questions
by hippo (Archbishop) on Oct 23, 2016 at 22:27 UTC
    $ cat ad.pl #!/usr/bin/env perl use strict; use warnings; use autodie; unlink ('filewhichdoesnotexist'); print "Everything went fine.\n"; $ ./ad.pl Can't unlink('filewhichdoesnotexist'): No such file or directory at ./ +ad.pl line 6 $

    So you can simply redirect STDERR to the logfile of your choosing.

Re^3: File Handle questions
by RonW (Parson) on Oct 25, 2016 at 22:45 UTC

    Looking at autodie, it seems to not be easy to use with logging - other than redirecting STDERR in to your log file. Also, it doesn't seem to have a hook for providing a function for custom formatting.

    You could try using an END block to log the error after something dies.

    You could set up a $SIG{__DIE_} handler (see %SIG) to intercept the error and call your log function. HOWEVER, $SIG{__DIE_} handlers are called even when die is called inside an eval, so can be messy to get working correctly.

    Maybe overriding CORE::GLOBAL::die() would work for your purpose.

    You could follow the examples in autodie to "trap" the die with eval, then examine $@ to determine whether and what to log.

    In your case, I'd say either redirect STDERR to your log file, or use die LOG_MSG(...); the way you are, now.