В Perl вы можете делать такие вещи для функций, используя AUTOLOAD
.
Пример
my @refun = (
[qr/(print|write)(Stuff|Things|Words)/ => sub { print "printStuff(@_)\n"; }],
[qr/fo+(?:ba+r)?/ => sub { print "foobar(@_)\n"; }],
);
our $AUTOLOAD;
sub AUTOLOAD{
for(@refun){
my ($re, $sub) = @$_;
goto &$sub if $AUTOLOAD =~ /$re/;
}
my ($package, $filename, $line) = caller;
die "Undefined subroutine &$AUTOLOAD called at $filename line $line.\n";
}
printStuff(10);
writeWords(10);
foo();
fooooooooooooooobar(1,2,3);
Выход:
printStuff(10)
printStuff(10)
foobar()
foobar(1 2 3)
Не уверен насчет переменных, но, возможно, это также возможно.