Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why isn't the "import" subroutine capitalized in Perl

I am curious. Most of Perl's implicitly called subroutines must be named in all caps. TIESCALAR, DESTROY, etc. In fact perldoc perltoot says

If constructors can have arbitrary names, then why not destructors? Because while a constructor is explicitly called, a destructor is not. Destruction happens automatically via Perl's garbage collection (GC) system, which is a quick but somewhat lazy reference-based GC system. To know what to call, Perl insists that the destructor be named DESTROY. Perl's notion of the right time to call a destructor is not well-defined currently, which is why your destructors should not rely on when they are called.

Why is DESTROY in all caps? Perl on occasion uses purely uppercase function names as a convention to indicate that the function will be automatically called by Perl in some way. Others that are called implicitly include BEGIN, END, AUTOLOAD, plus all methods used by tied objects, described in perltie.

Why then is the import subroutine left to be lower case? Does anyone have a good insight on this?

like image 864
Joel Berger Avatar asked Feb 19 '11 16:02

Joel Berger


2 Answers

I'd say that "import" is not called implicitly. It's an explicit call issued by implementation of use. To quote from perldoc use:

It is exactly equivalent to:

BEGIN { require Module; Module->import( LIST ); }

like image 63
DVK Avatar answered Sep 22 '22 10:09

DVK


To expand on DVK's answer a little, there are situations where you'd legitimately want to invoke import explicitly, for example when loading an optional module or auto-populating namespaces:

eval "require $modulename; $modulename->import( LIST ); ";

I can't think of any situation where you would ever want to invoke DESTROY, TIESCALAR, etc. explicitly.

like image 28
Adam Bellaire Avatar answered Sep 21 '22 10:09

Adam Bellaire