ErikR
ErikR

Reputation: 52049

.pm file that's loaded on every invocation of the perl interpreter?

I thought I remember reading somewhere about where perl can be configured to automatically load a certain .pm file on start up.

I know about PERL5OPT, but to my recollection, this was a specific file that would be loaded if it exists.

Is it a compile option that can be set (i.e. via Configure)?

Upvotes: 1

Views: 463

Answers (2)

aparker42
aparker42

Reputation: 996

Reading through perldoc perlrun it looks like you are looking for what is talked about in the -f option:

-f

Disable executing $Config{sitelib}/sitecustomize.pl at startup.

Perl can be built so that it by default will try to execute $Config{sitelib}/sitecustomize.pl at startup (in a BEGIN block). This is a hook that allows the sysadmin to customize how Perl behaves. It can for instance be used to add entries to the @INC array to make Perl find modules in non-standard locations.

Perl actually inserts the following code:

BEGIN {
do { local $!; -f "$Config{sitelib}/sitecustomize.pl"; }
&& do "$Config{sitelib}/sitecustomize.pl";
}

Since it is an actual do (not a require), sitecustomize.pl doesn't need to return a true value. The code is run in package main , in its own lexical scope. However, if the script dies, $@ will not be set.

The value of $Config{sitelib} is also determined in C code and not read from Config.pm , which is not loaded.

The code is executed very early. For example, any changes made to @INC will show up in the output of perl -V. Of course, END blocks will be likewise executed very late.

To determine at runtime if this capability has been compiled in your perl, you can check the value of $Config{usesitecustomize} .

I've never done this, but it looks like if you put what you want in $Config{sitelib}/sitecustomize.pl you'll get what you are looking for.

See:

Upvotes: 9

Kenny
Kenny

Reputation: 1090

I'm confused by what you mean by "on start up". If you mean when a script / CGI / whatever is "started", then just use the module in the script:

use Data::Dumper;

Or do you mean something else?

Upvotes: 0

Related Questions