I need to import all our variables from the unnamed Perl module (Module.pm) and use them inside the Perl script (Script.pl).
The following code works well without the “use strict”, but failed with it. How can I change this code to work with “use strict” without the manual listing of all imported variables (as described in the answer to other question)?
Thanks a lot for your help!
Script.pl:
use strict;
require Module;
print $Var1;
Module.pm:
our $Var1 = "1\n";
...
our $VarN = "N\n";
return 1;
Run the script:
$> perl Script.pl
Errors:
Global symbol "$Var1" requires explicit package name at Script.pl line 3.
Execution of Script.pl aborted due to compilation errors.
NOTE (1): The module is unnamed, so using a Module:: prefix is not the option.
NOTE (2): Module.pm contains also a set of functions configured by global variables.
NOTE (3): Variables are different and should NOT be stored in one array.
NOTE (4): Design is NOT good, but the question is not about the design. It’s about forcing of the listed code to work with minimal modifications with the complexity O(1), i.e. a few lines of code that don’t depend on the N.
Solution Candidate (ACCEPTED): Add $:: before all imported variables. It’s compliant with strict and also allows to differ my variables from imported in the code.
Change your script to:
The problem is the
$Var1isn’t in the main namespace, it’s inModule‘s namespace.Edit: As is pointed out in comments below, you haven’t named your module (i.e. it doesn’t say
package Module;at the top). Because of this, there is noModulenamespace. Changing your script to:…allows the script to correctly print out
1\n.