perlquestion
Krambambuli
Dear Monks,<br><br>
I have two simple modules:
<code>
package Demo1;
use base qw/Exporter/;
$SUCCESS = 1;
BEGIN {
use Exporter();
@ISA = qw(Exporter);
@EXPORT = qw( $SUCCESS )
}
1;
</code>
and
<code>
package Demo2;
sub import {
${[caller]->[0].'::'}{$_} = ${__PACKAGE__."::"}{$_}
foreach grep { not /^(ISA|isa|BEGIN|import|Dumper)$/ }
keys %{__PACKAGE__."::"};
}
use constant {
SUCCESS => 0,
};
1;
</code>
and a minimalistic test program, that is
<code>
#!/usr/bin/perl
use strict;
use warnings;
use Demo1;
use Demo2;
print "SUCCESS: ", SUCCESS, "\n";
print "\$SUCCESS: $SUCCESS\n";
exit;
</code>
If I run the program as shown, I see an compile time error, like
<code>
Bareword "SUCCESS" not allowed while "strict subs" in use at ./demo.pl line 9.
Execution of ./demo.pl aborted due to compilation errors.
</code>
but if I simply change the order of the use instructions, i.e. I run
<code>
#!/usr/bin/perl
use strict;
use warnings;
use Demo2;
use Demo1;
print "SUCCESS: ", SUCCESS, "\n";
print "\$SUCCESS: $SUCCESS\n";
exit;
</code>
then the displayed result is the expected one,
<code>
SUCCESS: 0
$SUCCESS: 1
</code>
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.<br><br>
Many thanks in advance.