sub import { my $me = shift; my $opts = ref($_[0]) ? shift : { for => scalar caller }; my %wanted = map { $_ => 1 } @_; *{ $opts->{for} . "::logf" } = $me->_generate_logf($opts) if $wanted{logf}; *{ $opts->{for} . "::logw" } = $me->_generate_logw($opts) if $wanted{logw}; ...; } sub _generate_logf { shift; my $opts = shift; return sub { my $msg = shift; my $log = _get_logger($opts->{for}, shift); return unless $log->is_fatal; $log->fatal($msg); die "\n"; } } ...;