は、ここで私が達成したいものです。どのようにしてサブルーチンを再定義し、古いものも保持できますか?
sub first {
print "this is original first";
}
*original_first = \&first;
sub first {
print "this is first redefined";
}
original_first(); # i expect this to print "this is original first"
first() # i expect this to print "this is first redefined"
私はfirst
のシンボルを保存することで、私は後で(名前original_first
下)オリジナルのサブルーチンを呼び出すこともできるようにすることができるだろうと思いましたfirst
に電話をかけ、再定義してください。しかし、私がoriginal_first
と呼んでも、私は "これが最初に再定義されました"ということをまだ得ています。私はこの仕事をするために何をしなければなりませんか?
「最初の」シンボルを再定義してコード部分のみに影響を与えることは可能ですか? – Geo
タイプグロブにcoderef(サブ{...}で生成)を代入すると、glob内のCODEエントリが置き換えられます。グロブ内の他のデータ型は変更されません –
特定のブロック内の関数のみを置き換えるには、 'local * first = sub {...};'を使うこともできます。 –