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
は完全に呼ばれないらしい。