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. |