4

Perlのオーバーライド機能について詳しく教えてください。いくつかの簡単な例は、理解するのに最適です。

4

3 に答える 3

5

perldoc COREは、組み込みの16進関数をオーバーライドする方法の簡単な例を示しています。

   BEGIN {
       *CORE::GLOBAL::hex = sub { 1; };
   }

   print hex("0x50"),"\n";                     # prints 1
   print CORE::hex("0x50"),"\n";               # prints 80
于 2012-05-02T13:38:25.750 に答える
4

http://perldoc.perl.org/perlsub.html#Overriding-Built-in-Functions

多くの組み込み関数はオーバーライドされる可能性がありますが、これはたまにしか試行されるべきではなく、正当な理由があります。通常、これは、Unix以外のシステムで欠落している組み込み機能をエミュレートしようとするパッケージによって実行される可能性があります。

オーバーライドは、コンパイル時にモジュールから名前をインポートすることによってのみ実行できます。通常の事前宣言では不十分です。ただし、use subsプラグマを使用すると、事実上、インポート構文を介してsubsを事前宣言できます。これらの名前は、組み込みの名前をオーバーライドする場合があります。

例:

use subs 'chdir', 'chroot', 'chmod', 'chown';
chdir $somewhere;
sub chdir { ... }

注:上記のすべては、上記のリンクから抽出されたものです

于 2012-05-02T13:40:07.717 に答える
1

Sub::Overrideを使用できますが、ネイティブ関数をオーバーライドできるかどうかはわかりません。

于 2012-05-02T13:33:45.587 に答える