【发布时间】:2009-08-05 02:57:47
【问题描述】:
我正在从 infile 读取 $digit,并希望将其打印到 outfile。但是 Perl 脚本给出了一个错误,提示“全局符号“$digit”需要明确的包名”。但是,如果我确实将其声明为全局 $digit='',则此值将打印到 outfile,而不是从 infile 中提取/读取的值。关于应该做什么有什么建议吗?
这就是我的做法:
my $digit='';
open (DATA, "</usr/infile") || die "cant open infile\n"; #file from digit has to read
while (<DATA>){
($digit)= $_=~ /\s9\s(\d+)/; #regex to capture digit '234' from ' 9 234'
if ($digit ne ""){
print "digit is $digit\n"; # this prints fine
}
}
open (FILE, ">/usr/outfile") || die "cant open outfile\n"; #file to which digit has to be finally written
print FILE "9 $digit"; #$digit takes in the value declared globally i.e. ''
close(DATA);
close (FILE);
【问题讨论】:
-
与您的问题无关:请包含 $!在你的死亡信息中。例如:死“/usr/infile:$!”
-
DATA文件句柄是特殊的。不要破坏了解 Perl 的人的合理假设。此外,无论如何,您都应该使用词法文件句柄。所以,使用open my $data ... -
@Sinan:这对我的问题有帮助吗?
-
请向我们展示说明问题的输入和输出。在您最近的编辑中,只有一个变量
$digit,其词法范围涵盖整个脚本(或多或少)和while循环。那么,发生了什么是输入文件/usr/infile的最后一行与您的正则表达式不匹配,因此将$digit设置为undef,当您打印它时,它看起来很像空白字符串。 :) -
@shubster 我不知道这是否对您当前的问题有所帮助,但它肯定会减少您必须阅读的内容才能为您提供帮助。帮助别人帮助你。
标签: perl error-handling global-variables