Ad

Difference Between Use Modulename; And Use Modulename();

- 1 answer

Is there any difference between use Modulename; and use Modulename(); ? Sometimes I see, for example, use Carp; and sometimes use Carp ();

Ad

Answer

As documented,

use Modulename;

is the basically the same as

BEGIN {
   require Modulename;
   import Modulename;
}

while

use Modulename ();

is the basically the same as

BEGIN { require Modulename; }

That means the parens specify that you don't want to import anything. (It would also prevent a pragma from doing its work.)


Carp exports confess, croak and carp by default, so

use Carp;

is short for

use Carp qw( confess croak carp );

By using

use Carp ();   # or: use Carp qw( );

confess, croak and carp won't be added to the caller's namespace. They will still be available through their fully qualified name.

use Carp ();
Carp::croak(...);
Ad
source: stackoverflow.com
Ad