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?
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 ); }
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.
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