Think about Loose Coupling | |
PerlMonks |
perlfunc:requireby gods (Initiate) |
on Aug 24, 1999 at 22:42 UTC ( [id://274]=perlfunc: print w/replies, xml ) | Need Help?? |
requireSee the current Perl documentation for require. Here is our local, out-dated (pre-5.6) version: require - load in external functions from a library at runtime
require EXPR require
Demands some semantics specified by
EXPR, or by 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 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) { $result = do $realfilename; last ITER; } } die "Can't find $filename in \@INC"; } die $@ if $@; die "$filename did not return true value" unless $result; $INC{$filename} = $realfilename; return $result; }
Note that the file will not be included twice under the same specified name. The file must return
TRUE as the last statement to indicate successful execution of any initialization code, so it's customary to end such a file with ``
If EXPR is a bareword, the require assumes a ``.pm'' extension and replaces ``::'' with ``/'' in the filename for you, to make it easy to load standard modules. This form of loading of modules does not risk altering your namespace. In other words, if you try this:
require Foo::Bar; # a splendid bareword
The require function will actually look for the ``Foo/Bar.pm'' file in the directories specified in the But if you try this:
$class = 'Foo::Bar'; require $class; # $class is not a bareword #or require "Foo::Bar"; # not a bareword because of the ""
The require function will look for the ``Foo::Bar'' file in the
eval "require $class"; For a yet-more-powerful import facility, see use and the perlmod manpage. |
|