diff options
author | Abhijit Menon-Sen <ams@wiw.org> | 2003-10-07 03:55:18 +0000 |
---|---|---|
committer | Abhijit Menon-Sen <ams@wiw.org> | 2003-10-07 03:55:18 +0000 |
commit | 209071589ddd827372bd46e1358d1d13f6b4dbcb (patch) | |
tree | 53d7bcdc8231801292df9bd58fb2682e35a8550c /pod/perlfunc.pod | |
parent | d5dede0455edd65d2ac561aaf6cfdbdfc0d662ee (diff) | |
download | perl-209071589ddd827372bd46e1358d1d13f6b4dbcb.tar.gz |
Update perlfunc/require to describe NXDOMAIN caching... er, you
know what I mean.
p4raw-id: //depot/perl@21417
Diffstat (limited to 'pod/perlfunc.pod')
-rw-r--r-- | pod/perlfunc.pod | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/pod/perlfunc.pod b/pod/perlfunc.pod index f2e2b97e5d..4d4efc53df 100644 --- a/pod/perlfunc.pod +++ b/pod/perlfunc.pod @@ -4054,28 +4054,36 @@ version should be used instead. Otherwise, demands that a library file be included if it hasn't already been included. The file is included via the do-FILE mechanism, which is -essentially just a variety of C<eval>. Has semantics similar to the following -subroutine: +essentially just a variety of C<eval>. Has semantics similar to the +following subroutine: sub require { - my($filename) = @_; - return 1 if $INC{$filename}; - my($realfilename,$result); - ITER: { - foreach $prefix (@INC) { - $realfilename = "$prefix/$filename"; - if (-f $realfilename) { - $INC{$filename} = $realfilename; - $result = do $realfilename; - last ITER; - } - } - die "Can't find $filename in \@INC"; - } - delete $INC{$filename} if $@ || !$result; - die $@ if $@; - die "$filename did not return true value" unless $result; - return $result; + my ($filename) = @_; + if (exists $INC{$filename}) { + return 1 if $INC{$filename}; + die "Compilation failed in require"; + } + my ($realfilename,$result); + ITER: { + foreach $prefix (@INC) { + $realfilename = "$prefix/$filename"; + if (-f $realfilename) { + $INC{$filename} = $realfilename; + $result = do $realfilename; + last ITER; + } + } + die "Can't find $filename in \@INC"; + } + if ($@) { + $INC{$filename} = undef; + die $@; + } elsif (!$result) { + delete $INC{$filename}; + die "$filename did not return true value"; + } else { + return $result; + } } Note that the file will not be included twice under the same specified |