Krambambuli has asked for the wisdom of the Perl Monks concerning the following question:
Dear Monks,
I have two simple modules:
Many thanks in advance.
I have two simple modules:
andpackage Demo1; use base qw/Exporter/; $SUCCESS = 1; BEGIN { use Exporter(); @ISA = qw(Exporter); @EXPORT = qw( $SUCCESS ) } 1;
and a minimalistic test program, that ispackage Demo2; sub import { ${[caller]->[0].'::'}{$_} = ${__PACKAGE__."::"}{$_} foreach grep { not /^(ISA|isa|BEGIN|import|Dumper)$/ } keys %{__PACKAGE__."::"}; } use constant { SUCCESS => 0, }; 1;
If I run the program as shown, I see an compile time error, like#!/usr/bin/perl use strict; use warnings; use Demo1; use Demo2; print "SUCCESS: ", SUCCESS, "\n"; print "\$SUCCESS: $SUCCESS\n"; exit;
but if I simply change the order of the use instructions, i.e. I runBareword "SUCCESS" not allowed while "strict subs" in use at ./demo.pl + line 9. Execution of ./demo.pl aborted due to compilation errors.
then the displayed result is the expected one,#!/usr/bin/perl use strict; use warnings; use Demo2; use Demo1; print "SUCCESS: ", SUCCESS, "\n"; print "\$SUCCESS: $SUCCESS\n"; exit;
I'd love to understand what's happening here - and would bve grateful to learn if there is a way to not have to use the two modules in a strict order in order to have the code working nevertheless.SUCCESS: 0 $SUCCESS: 1
Many thanks in advance.
Back to
Seekers of Perl Wisdom