以下の内容はhttps://end0tknr.hateblo.jp/entry/20150816/1439693396より取得しました。


perlにおける関数/メソッドの動的呼び出し

「$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;



以上の内容はhttps://end0tknr.hateblo.jp/entry/20150816/1439693396より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14