如果它包含变量,我在子例程调用和打印到调试文件时遇到问题$ruleRegExp
。
我使用这些参数运行脚本:
./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;
}