Hallo,
ich habe ein Perl-Script, in dem ich durch require ein anderes Perl-Script aufrufe, dass wiederum anhand einer Property Datei einen Hash befüllt. Wenn ich nun use strict in dem aufrufenden Script1 verwende, dann erhalte ich den Fehler
Global Symbol "%configValue" requires explicit package name
Das liegt daran das ich die variable %configValue in Script1 nicht vorher deklariert habe, so denke ich mir das zumindest. Die Variable wird doch aber in Script2 deklariert, das ich über require importiere.
Es funktioniert natürlich ohne use strict...kann ich es auch zum laufen bekommen mit use strict? Oder geht das gar nicht?
Danke für eure Ratschläge.
Script1:
use strict;
use POSIX;
use File::Copy;
my $importConfigurationPath = substr($0,0,2 ) . "/copra-server/common/scripts/importConfiguration.pl";
require "$importConfigurationPath";
#exit falls aufruf mit != 3 argumenten
if ($#ARGV + 1 != 3){
print "invalid amount of args, syntax has to be distributeJobs.pl [BPS_CONFIG_FILE] [JobsToDistributeFolder] [job-prefix]]\n";
exit;
}
(my $config_filename, my $jobsToDistributeFolder, my $jobPrefix) = @ARGV;
my $logfolder = $configValue{logfolder};
Script2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use strict;
my $importConfigurationFile = substr($0,0,2) . "/copra-server/common/configuration/configuration.properties";
our %configValue;
print "\nstarting importconfiguration.pl\n";
open(FILE,$importConfigurationFile);
while(defined(my $line = <FILE>)) {
if ($line =~ m/.*=.*/g){
chomp($line);
my $key = substr($line,0,index($line,"="));
my $value = substr($line,index($line,"=")+1,length($line));
#print "key is: $key -----> value is: $value\n";
$configValue{"$key"}="$value";
}
}
close(FILE);
while ((my $currentKey,my $currentValue) = each %configValue){
print "key, value pair is ($currentKey,$currentValue)\n";
}
print "-------import finished -----------------------\n";