What is the difference between doing use My::Module
and require My::Module
?
Note that a use statement is evaluated at compile time. A require statement is evaluated at execution time. If the VERSION argument is present between Module and LIST, then the use will call the VERSION method in class Module with the given version as an argument.
Description. This function then it demands that the script requires the specified version of Perl in order to continue if EXPR is numeric. If EXPR or $_ are not numeric, it assumes that the name is the name of a library file to be included.
Use require when the file is required by the application. Use include when the file is not required and application should continue when file is not found.
The use
function:
use ModuleName;
is equivalent to the following code using the require
function:
BEGIN {
require ModuleName;
ModuleName->import;
}
The BEGIN
block causes this code to run as soon as the parser sees it. The require
loads the module or die
s trying. And then the import
function of the module is called. The import
function may do all sorts of things, but it is common for it to load functions into the namespace that use
d it (often with the Exporter
module).
It is important to note that import will not be called in this case:
use ModuleName ();
In that case, it is equivalent to
BEGIN {
require ModuleName;
}
From perldoc -q
"difference between require and use":
use Module
is likerequire Module
, except thatuse
4.1: loads the module at compile time, not run-time.
4.2: imports symbols and semantics from that package to the current one.
Perl comes with great documentation. Everyone would benefit from reading the entire documentation at least once every few months.
C:\>
perldoc -f require
Otherwise
require
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 with the caveat that lexical variables in the invoking script will be invisible to the included code. Has semantics similar to the following subroutine:
... etc. Similarly,
C:\>
perldoc -f use
Imports some semantics into the current package from the named module, generally by aliasing certain subroutine or variable names into your package. It is exactly equivalent to
BEGIN { require Module; Module->import( LIST ); }
except that Module must be a bareword.
... etc
There is also the perlfaq entry although I think it is less informative than the above.
use
runs at compile time, and require
runs at run time.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With