package Logger; my $singleton_object; sub new { my $class = ref $_[0] || $_[0]; $singleton_object ||= bless $singleton_object, $class; } sub logfile_handle_for_method { my $self = shift; my ($package, $subroutine) = @_; # not cross-platform... $package =~ s!::!/!g; my $filename = "/var/log/$package/$subroutine.log"; return $self->{filehandles}{$filename} if $self->{filehandles}{$filename}; my $fh; open $fh, ">$filename" | die; $self->{filehandles}{$filename} = $fh; } sub log { my $self = shift; my ($package, $filename, $line, $subroutine, $hasargs, $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller(1); my $fh = $self->logfile_handle_for_method($package, $subroutine); print $fh, @_; }