use warnings;
use strict;
package Log; {
sub new {
my $self = bless {}, shift;
my $log_file = shift;
open my $fh, '>', $log_file or die $!;
$self->{default_log} = $fh;
return $self;
}
sub log {
my ($self, $msg, $log) = @_;
my $log_fh;
if (defined $log){
# filename sent in
open my $fh, '>>', $log or die $!;
$log_fh = $fh;
}
else {
# use the default fh
$log_fh = $self->{default_log};
}
print $log_fh "$msg\n";
}
}
package main; {
my $log = Log->new('default.log');
$log->log('default log message');
$log->log('alternate log file msg', 'not-default.log');
}
####
$ cat default.log
default log message
####
$ cat non-default.log
alternate log file msg
####
sub log {
my ($self, $msg, $log) = @_;
my $log_fh;
if (defined $log && ref $log ne 'GLOB'){
# filename sent in
open my $fh, '>>', $log or die $!;
$log_fh = $fh;
}
elsif (defined $log && ref $log eq 'GLOB'){
# file handle sent in
$log_fh = $log;
}
else {
# use the default fh
$log_fh = $self->{default_log};
}
####
open my $fh, '>>', 'alternate.log' or die $!;
$log->log('msg', $fh);