多くの組み込み関数は、再定義することができますが、これは、ちゃんとした理 由があるときに限って行なうべきです。UNIX 以外のシステムで、実装されてい ない組み込み関数をエミュレートするために使われるのが普通でしょう。
再定義は、モジュールから名前をインポートすることでのみ行なうことができ、 通常の前方宣言は十分ではありません。しかし、subs プラグマ (コンパイラディ レクティブ) を使うと、インポート構文で前方宣言されたものと同様に有効とな り、組み込み関数をその名前で再定義することができます:
use subs 'chdir', 'chroot', 'chmod', 'chown'; chdir $somewhere; sub chdir { ... }
ライブラリモジュールは一般に、デフォルトの @EXPORT リストの一部として
open
や chdir
といった組み込みの名前をエクスポートすべきで
はありません。これらの名前は、思わぬところの名前空間に侵入して、思わぬよ
うに意味を変えてしまうかも知れないからです。その代わりに、モジュール側で
@EXPORT_OK に名前を入れておけば、使用する側では暗黙にではなく、明示的に
インポートすることができるようになります。つまり、
use Module 'open';
とは書くことができ、open
をインポートして再定義しますが、
use Module;
とした場合には、再定義の無いデフォルトのインポートが行なわれます。
Go to the first, previous, next, last section, table of contents.