2013年10月3日木曜日

perl の use について調べたのでメモ

perlのuseについて調べたのでメモ。 use Module LISTは perldoc.jp http://perldoc.jp/func/use によると

BEGIN { require Module; Module->import( LIST ); }

と等価らしいです。

#!/usr/bin/perl
use Data::Dumper (qw(Dumper));
warn Dumper 1; # $VAR1 = 1;
#!/usr/bin/perl
BEGIN {require Data::Dumper; Data::Dumper->import(qw(Dumper)); }
warn Dumper 1 ; # $VAR1 = 1;

確かに同じっぽい。なるほど。

パッケージの import メソッドを呼び出したくない場合(例えば、名前空間を 変更したくない場合など)は、明示的に空リストを指定してください:

    use Module ();
これは以下と完全に等価です:

    BEGIN { require Module }

そこは

BEGIN { require Module; Module->import(()); }

と等価ってことでもあるのかな?と思って実験。まず

use Data::Dumper ();
warn Dumper(1); # Undefined subroutine &main::Dumper called

は importされないわけだからエラー。

BEGIN {require Data::Dumper; Data::Dumper->import(()); }
warn Dumper(1); # $VAR1 = 1;

予想が外れた。どうやらimportは完全に呼ばれないらしい。

0 件のコメント:

コメントを投稿