http://www.perlmonks.org?node_id=756613

legova has asked for the wisdom of the Perl Monks concerning the following question:

I have a script that calls a function in a module, and inside the module a global variable is defined. The function in the module tests the value of the global variable inside a try{} block. When the global is declared using "my", the variable is undefined inside the try{}. If I change the declaration to "our", or access the variable outside the try{} but inside in the normal scope of the function, then the variable is defined correctly. It seems like the initialization of the variable is optimized out, that the code in the try{} isn't analyzed when the function is initialized. I am trying to understand why this is the case, and whether this is expected behavior or not. Using Perl 5.8.3.

Thanks,
-Andy

Calling script:

#!/usr/bin/perl -w require "./global_stuff.pm"; global_stuff::print_global_variable();

Module: global_stuff.pm:

package global_stuff; use Error qw(:try); use strict; my $GLOBAL_VARIABLE = "IT'S WORKING FINE"; sub print_global_variable { #warn "global_variable = $GLOBAL_VARIABLE"; try { warn "global_variable = $GLOBAL_VARIABLE"; } catch Error with { }; } return 1;