use File::Basename 'dirname'; sub get_config { my $filename = dirname($INC{'acme.pm'}) . "/$_[0]"; croak "Can't find $filename" unless -f $filename; ... } #### sub find_config { my $filename = shift; foreach (@_) { return "$_/$filename" if -f "$_/$filename"; } return; } my $filename = find_config("acme.conf", @INC, "/also/search/here", "/and/here") or die "Couldn't find acme.conf!";