use warnings; use strict; sub load_config { my $file = shift; local *get_config; if (not my $return = do $file) { die "couldn't parse $file: $@" if $@; die "couldn't do $file: $!" unless defined $return; die "couldn't run $file" unless $return; } return \&get_config; } my $foo = load_config( "Foo.conf" ); my $bar = load_config( "Bar.conf" ); print $foo->(), "\n"; # prints "Foo!" print $bar->(), "\n"; # prints "Bar!"