Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^11: replicating the command 'unset LIBPATH' in perl

by viffer (Beadle)
on May 20, 2010 at 00:32 UTC ( #840836=note: print w/replies, xml ) Need Help??


in reply to Re^10: replicating the command 'unset LIBPATH' in perl
in thread replicating the command 'unset LIBPATH' in perl

I was referring to Anonymous Monk and JavaFan's BEGIN code.

I have now moved the BEGIN to line 1. I thought it didn't matter where you put the BEGIN statement since it executed first at compile time? Obviously not!

I presumed the code had just 'stopped' since using perl -d it didn't allow me to step through the script - but when I checked the log files it had run.

The weird thing is when I include the line

"unless( $ENV{+ __FILE__ } eq __FILE__ ){"
from AnonymousMonks code (below:)
BEGIN { unless( $ENV{ +__FILE__ } eq __FILE__ ){ delete $ENV{LIBPATH}; $ENV{ +__FILE__ } = __FILE__; exec $^X, __FILE__, @ARGV; } }
I get the uninitialised error message, I can't step through the code, but it connects and works, however
if I exclude the line, (as per JavaFans example here:),
BEGIN { if (exists $ENV{LIBPATH}) { delete $ENV{LIBPATH}; exec $^X, __FILE__, @ARGV; } }
I don't get the uninitialsed error, I can step through the script, but I can't connect!

I really don't understand what the line:

"unless( $ENV{+ __FILE__ } eq __FILE__ ){"
is trying to do, but without it the solution doesn't work. They both delete the LIBPATH and both do the same exec, but only one works.

I could live without being able to step through the code in debug mode, although again, I don't understand why the inclusion of Anonymous Monks BEGIN code seems to disable debug mode.

I really do appreciate everyones patience.

Replies are listed 'Best First'.
Re^12: replicating the command 'unset LIBPATH' in perl
by Anonymous Monk on May 20, 2010 at 02:07 UTC
    I was referring to Anonymous Monk and JavaFan's BEGIN code.

    But the code starts with first two lines

    #!/usr/bin/perl -- BEGIN {

    I thought it didn't matter where you put the BEGIN statement since it executed first at compile time? Obviously not!

    Who told you that? Which line do you think gets executed first?

    $ cat junk12.pl warn "hello"; BEGIN { warn "hello "; } warn "hello"; BEGIN { warn "hello "; } warn "hello";

    See also Execution order of END/CHECK vs BEGIN/INIT

    I get the uninitialised error message,

    Those are called warnings (see perllexwarn), and in order to get warnings, you have to specifically turn them on, which the code I posted did not do (you should do that in your code, ...).

    I could live without being able to step through the code in debug mode, although again, I don't understand why the inclusion of Anonymous Monks BEGIN code seems to disable debug mode.

    Wait, what? perldoc -f exec

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://840836]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2022-05-28 21:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (101 votes). Check out past polls.

    Notices?