summaryrefslogtreecommitdiff
path: root/pod/perlfunc.pod
diff options
context:
space:
mode:
authorAbhijit Menon-Sen <ams@wiw.org>2003-10-07 03:55:18 +0000
committerAbhijit Menon-Sen <ams@wiw.org>2003-10-07 03:55:18 +0000
commit209071589ddd827372bd46e1358d1d13f6b4dbcb (patch)
tree53d7bcdc8231801292df9bd58fb2682e35a8550c /pod/perlfunc.pod
parentd5dede0455edd65d2ac561aaf6cfdbdfc0d662ee (diff)
downloadperl-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.pod48
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