In Perl, what is the difference between use and require for loading a module?

module, perl, require

Solution

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;
}

Problem

What is the difference between doing `use My::Module` and `require My::Module`?

Original source