【发布时间】:2015-04-05 21:10:12
【问题描述】:
努力寻找解决方案。但我可能需要一些帮助。我试图在 perl 的系统命令中传递一堆参数。但我得到一个不相关的错误。我在正确的范围内正确声明了我的变量,但仍然在下面出现此错误。这是我的代码。
#!/usr/bin/perl
use warnings;
use strict;
my $mi = 0;
my $mj = 0;
my @regbyte;
my @databyte;
my $filename;
my @args;
@regbyte = ("00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F","10","11","12");
@databyte = ("00","01","02","03","04","05","06","07","08","09", "0A", "0B");
for($mi=0; $mi<13; $mi++)
{
for($mj=0; $mj<256; $mj++)
{
$filename = "write_" . $regbyte[$mi] . "_" . $databyte[$mj] . ".atp";
system("perl perl_2_ver2.5.pl", $filename, $regbyte[$mi], $databyte[$mj], "n");
}
}
这是我收到的错误消息。
Global symbol "$databyte" requires explicit package name at perl_2_ver2.8.pl line 20.
Execution of perl_2_ver2.8.pl aborted due to compilation errors.
【问题讨论】:
-
我在尝试验证您的代码时没有遇到同样的错误。你确定它是逐字复制的吗?另外 - 我认为你有一个逻辑错误。您迭代了 @databyte 的 256 个元素,但它没有那么多元素。 (无论如何,foreach 循环可能更适合您正在做的事情)
-
您向我们展示的脚本是
perl_2_ver2.8.pl脚本吗?如果没有,您就没有显示相关的 Perl 代码。如果是,为什么要通过再次执行脚本来“递归”?您可以消除@args并且可以(应该)在您定义它们的行中初始化@regbyte和@databyte。所有$mi、$mj和$filename的范围都可以比你的范围小得多。 -
您显示的错误消息与 Perl 源代码不对应。第 20 行是您的
system调用,但您没有访问名为$databyte的变量——您访问的只是数组@databyte的一个元素,这不会产生该错误消息。