プロが教えるわが家の防犯対策術!

perlの出力結果を加工するため、ラクダ本を読んでprint関数のオーバーライドに挑戦したのですが、
どうしてもうまくいきません。
BEGIN {
*CORE::GLOBAL::print = sub{ 1 };
};

print 2;
の様にやっても、2が出力されてしまいます。
他の関数ではこの方法で動くようでした。

printはオーバーライドできないのでしょうか。
マニアックな質問かもしれませんが、よろしくお願いします。

A 回答 (1件)

v5.8.1の時点でオーバーライドできないものに


defined,delete,do,else,elsif,eval,exists,for,foreach,format,glog,goto,grep,if,last,local,m,map,my,next,no,our,package,pos,print,printf,prototype,q,qq,qr,qw,qx,redo,require,return,s,scalar,sort,split,study,sub,tie,tied,tr,undef,unless,untie,until,use,while,y
があります。その他のものはオーバーライドできます。(クックブック12.12(日本版2版P589))
ちなみに
オーバーライドするために
CORE::GLOBAL::を使うのはあまり良い方法とは言えません。システム全体を変更してしまうためです。
(もちろん必要ならやっていいのですが)
変更を限定するために
同じ名前で関数を定義し&を付けて呼び出すことで普通はことたります。
    • good
    • 0
この回答へのお礼

オーバーライドできない関数が沢山あったんですね・・・
できないのなら仕方がないですね。
大変勉強になりました。
ありがとうございました。

お礼日時:2005/01/03 03:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!