「$function()」のような関数呼び出しの場合、「no strict "refs"」します。
「$object->$method()」のようなメソッド呼び出しする場合は、
単純に文字列をメソッドとしてcallする方法と、GoFのコマンドパターンがあります。
詳細は、以下のscriptの通りです。
#!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; main(); sub main { #### DYNAMIC CALL FUNCTION my $func_name = "dynamic_call_function"; { no strict "refs"; &{$func_name}('ABCDE'); } #### DYNAMIC CALL METHOD my $dynamic_class = DynamicCallClass->new(); my $method_name = "dynamic_call_method"; $dynamic_class->$method_name('ABCDE'); #### DYNAMIC CALL METHOD (GoF - COMMAND PATTERN) my $dynamic_class_name = 'DynamicCallClass'; $dynamic_class = $dynamic_class_name->new(); $dynamic_class->dynamic_call_method('ABCDE'); } sub dynamic_call_function { my ($arg_val) = @_; my $func_name = (caller(0))[3]; print "$func_name was called ... arg_val=$arg_val\n"; } 1; package DynamicCallClass; sub new { my ($class) = @_; my $self = {}; $self = bless $self, $class; return $self; } sub dynamic_call_method { my ($self,$arg_val) = @_; my $method_name = (caller(0))[3]; print "$method_name was called ... arg_val=$arg_val\n"; } 1;