我收到错误:
panic: attempt to copy freed scalar a121fb4 to a156be8 at ./p.pl line 13.
当我运行以下程序时(p.pl
):
use warnings;
use strict;
use Getopt::Long qw(GetOptions);
main(@ARGV);
sub main {
GetOptions ();
print "\@ARGV=@ARGV\n";
my $arg=shift;
}
例如,当使用一个或多个命令行参数时p.pl 1
给出错误。
这是什么原因呢?
这是因为你通过而发生的错误@ARGV
.
@_
设置为值的别名@ARGV
. GetOptions
然后对原来的进行操作@ARGV
,所以你以后shift @_
有问题。
这里有两个解决方案。
-
Perform GetOptions
在调用子函数之前:
GetOptions(); # Manipulate @ARGV before passing it.
main(@ARGV);
sub main {
print "\@ARGV=@ARGV\n";
my $arg = shift;
}
-
不用费心路过@ARGV
因为无论如何它都是全球性的:
main(); # Don't pass @ARGV since it's global
sub main {
GetOptions();
print "\@ARGV=@ARGV\n";
my $arg = shift @ARGV;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)