BEGIN { for my $name (qw {slurp get}) { eval<<"TILL_HERE"; sub $name { print("This is $name\n"); } TILL_HERE } } slurp; get; __END__ This is slurp This is get #### sub slurp; sub get; sub AUTOLOAD { my ($func) = $main::AUTOLOAD =~ /.*::(.*)/; if ($func eq "slurp" || $func eq "get") { print("This is $func\n"); } } slurp; get; __END__ This is slurp This is get #### sub common { my ($name, @args) = @_; print("This is $name\n"); } sub slurp {common("slurp", @_)} sub get {common("get", @_)} slurp; get; __END__ This is slurp This is get