• ベストアンサー

オーバーライドについて

perlの出力結果を加工するため、ラクダ本を読んでprint関数のオーバーライドに挑戦したのですが、 どうしてもうまくいきません。 BEGIN { *CORE::GLOBAL::print = sub{ 1 }; }; print 2; の様にやっても、2が出力されてしまいます。 他の関数ではこの方法で動くようでした。 printはオーバーライドできないのでしょうか。 マニアックな質問かもしれませんが、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.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::を使うのはあまり良い方法とは言えません。システム全体を変更してしまうためです。 (もちろん必要ならやっていいのですが) 変更を限定するために 同じ名前で関数を定義し&を付けて呼び出すことで普通はことたります。

TheBlackArtist
質問者

お礼

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

関連するQ&A