doとrequireの違いがわからなくなったので調べてみた
まずはperldocを読むべし。
do EXPR
Uses the value of EXPR as a filename and executes the contents of the file as a Perl script
require EXPR
demands some semantics specified by EXPR
これだけだとよくわかんないので、
warn 'loaded'; { foo => 1};
という単純な設定ファイルをdo/requireしてみる。
do
do 'config.pl'; do 'config.pl'; print $INC{'config.pl'}; # loaded at config.pl line 1. # loaded at config.pl line 1. # config.pl
require
require 'config.pl'; require 'config.pl'; print $INC{'config.pl'}; # loaded at config.pl line 1. # config.pl
requireは1回のみロード、doは何回もロードされる。%INCにPATHが設定されるのは同じ。
じゃあ、doは@INCから検索されるのか?
do 'Test/More.pm'; warn $INC{'Test/More.pm'}; # /Users/kotaro/perl5/perlbrew/perls/perl-5.15.4/lib/5.15.4/Test/More.pm
されますねー。
ちなみにdoはrequireみたいにbarewordでのモジュールロードはできないぽい。
まとめ
doとrequireは"once"かどうかが違う。