我有一個子程序調用和打印的問題進行調試文件,如果它包含變量$ruleRegExp
。全球符號「%s」需要明確的包名
我運行該腳本,這些PARAMS:
./script --help --input=input --output=vystup --format=regulars
正是它說:
Global symbol "$ruleRegEx" requires explicit package name at ./script line 68.
Global symbol "$ruleRegEx" requires explicit package name at ./script line 69.
Execution of ./script aborted due to compilation errors.
我試圖想通了其中的問題,並閱讀論壇,但我還沒有找到一個事務所問題與這個問題。
我寫在我的國家語言註釋,所以不講究的意見 - 的代碼行,我認爲都與此有關的錯誤有上殼的意見。
我的整個代碼是:
#!/usr/bin/perl
use strict;
use Getopt::Long;
use Fcntl;
# použité proměné
my $help; # pro nastavení parametru help
my $br; # pro nastavení parametru br
my $formatFile;
my $inputFile;
my $outputFile;
my $string; #řetězec načtený ze vstupního souboru
my $ruleRegEX; #DECLARED HERE
my $ruleConsequence; #řetězec, definuje obsah tagu pro daný reg. výraz
#použité funkce
sub readInput;
sub readRule;
GetOptions (
"help" => \$help,
"br" => \$br,
"format=s" => \$formatFile,
"input=s" => \$inputFile,
"output=s" => \$outputFile
);
#checkParams()
print "Help = $help\n";
print "br = $br\n";
print "format = $formatFile\n";
print "input = $inputFile\n";
print "output = $outputFile\n";
#Debugovací soubor pro kontrolní výpisy
sysopen DEBUG, "Debug", O_WRONLY | O_CREAT or die "Debug soubor se nepodařilo otevřít. $!\n";
print DEBUG "Debug: Debug soubor otevřen.\n";
#otevře formátovací soubor pro čtení, převádí jeho vstup do utf8 a pokud se otevření nepovede vrací chybové hlášení
open FORMAT, "$formatFile" or die "Formátovací soubor se nepodařilo otevřít. $!\n";
print DEBUG "Debug: Formátovací soubor otevřen.\n";
#otevře vstupní soubor
if ($inputFile) {
open STDIN, "<$inputFile" or die "Vstupní soubor se nepodařilo otevřít. $!\n";
print DEBUG "Debug: Vstupní soubor otevřen.\n";
}
#otevře výstupní soubor, pokud neexistuje vytvoří jej.
if ($outputFile) {
sysopen STDOUT, "$outputFile", O_RDWR | O_CREAT or die "Výstupní soubor se nepodařilo otevřít. $!\n";
print DEBUG "Debug: Výstupní soubor otevřen.\n";
#otestovat úspěch zápisu
print STDOUT "Debug: Pokusný zápis.\n"
}
readInput ($string); #načte vstup
print DEBUG "Debug: Vstup:\"$string\"\n";
#načte z formátovacího souboru jedno pravidlo do proměnných ruleRegEx a ruleConsequence
readRule($ruleRegEx, $ruleConsequence); #USED HERE
print DEBUG "Debug: ruleRegEx = \"$ruleRegEx\"\n"; #AND HERE
#useRule();
sub checkParams {
my ($help, $br, $formatFile, $inputFile, $outputFile) = @_;
}
# Funkce pro načtení vstupu ze vstupního souboru
#$_[0] = proměnná, do které se bude načtený vstup zapisovat
sub readInput($$) {
local $/ = undef;
$_[0] = <STDIN>;
print DEBUG "Debug: načten vstup:\n";
}
#Funkce pro načtení jednotlivých částí jednoho pravidla z formátovacího souboru.
#$_[0] - rexulární výraz
#$_[1] - definice vlastností tagu
sub readRule($$) {
my $rule = <FORMAT>;
my $divider = "\t";
my $index = index($rule, $divider);
print DEBUG "Debug: \$index = \"$index\"";
$_[0] = substr $rule, 0, $index-1;
}
除了'使用嚴格的;'在頂部,你還需要使用'警告;'。 – 2013-03-16 23:20:50