For some reason, I thought I had to use a seperate module for the sub () {} optimizations to occur, but the following works fine.
use strict;
use warnings;
use vars qw( $LOG_FILE_NAME );
BEGIN {
if (@ARGV && $ARGV[0] =~ /^-?-log(?:=(.*))?$/) {
*LOGGING = sub () { 1 };
$LOG_FILE_NAME = $1;
} else {
*LOGGING = sub () { 0 };
}
}
if (LOGGING) {
if (defined($LOG_FILE_NAME)) {
open(LOG_FH, '>>', $LOG_FILE_NAME)
or die("Can't open log file: $!\n");
} else {
open(LOG_FH, '>&STDERR')
or die("Can't dup STDERR: $!\n");
}
}
print LOG_FH ('Opening log file at '.localtime().".$/") if LOGGING;
perl -MO=Terse script.pl
LISTOP (0x1df5678) leave [1]
OP (0x1df55fc) enter
COP (0x1df56c0) nextstate
OP (0x1ba3544) null [5]
COP (0x1df563c) nextstate
OP (0x1df53f8) null [5]
script.pl syntax OK