パスワードを忘れた? アカウント作成
449856 journal

T.MURACHIの日記: 無名サブルーチンの再帰呼び出し

日記 by T.MURACHI

パッケージ内でプライベートなサブルーチンなんかを定義しようとして、

package hoge;

my $func = sub {
# ...
};

sub ugege {
my $val = shift;
&$func($val);
# ...
}

なーんてことをやったりするのですが、このプライベートなサブルーチンを再帰呼び出ししたいなぁなどと思って、

my $func = sub {
my $foo = shift;
# ...
&$func($bar); # エラー: 未定義のサブルーチン呼び出し
};

などとやろうとすると、実行時にエラーになってしまいます。

回避は意外に簡単で、単に変数の宣言と関数リファレンスの代入を分けて書けば良いだけみたいです。

my $func; # 宣言だけ先に済ませておくのがミソ
$func = sub {
my $foo = shift;
# ...
&$func($bar);
};

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」

読み込み中...