1) do $file is like eval `cat $file`, except the former
1.1: searches @INC and updates %INC.
1.2: bequeaths an *unrelated* lexical scope on the eval'ed code.
It is the unrelated bit; in the eval'ed code lexicals from the including code are not visible. Consider:
# file foo.pl
print $var,"\n";
# requiring code
$var = 'foo';
require 'foo.pl';
prints foo whilst
# requiring code
my $var = 'foo';
require 'foo.pl';
does not. Also, a file is only required once, so constructs like
our $var;
for $var ( qw(foo bar quux) ) {
require 'foo.pl';
}
won't work as you would expect, since only foo is printed: require on subsequent passes through the
loop will just return 1 and not eval the code again.
See also use, require, do or what?
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
|