package Signatures; my @packages; sub import { my $package = caller; push @packages, $package; } INIT { for my $package (@packages) { no warnings; no strict; for (keys %{ $package . '::' }) { next unless exists &{ $package . "::$_" }; my $sub = \&{ $package . "::$_" }; next unless my $proto = prototype $sub; eval qq { package $package; sub $_ { local ($proto) = \@_; \$sub->() } } } } } 1;