Throwing together some code recently, I needed a log function that would keep a file handle open and scoped to itself. I've since found it useful in several places. If you find an reasons *not* to do something like this, please post!
c
#!/usr/bin/perl
use warnings;
use strict;
my $log_file = createLog(time() . '.log');
$log_file->("$0 Initialized");
sub createLog {
my $log_file = shift;
open my $log_handle, ">$log_file" or die "Log file creation failed
+: [$!]\n";
select((select($log_handle), $| = 1)[0]);
return sub {
my $msg = shift;
my $time = scalar(localtime());
$msg = "BGN[$time]\n$msg\nEND[$time]\n\n";
if (fileno $log_handle) {
print $log_handle $msg;
}
else {
warn "Log file closed: $msg";
}
return;
}
}