我在这个perl代码中遇到了一个问题。 它显示了一些错误“离开的ARRAY的奇怪副本”。虽然代码是正确的,但我觉得。任何人都可以提供帮助。
#!/usr/bin/perl -w
use strict;
sub getStatus() {
#my $self = shift;
my $status;
my @details;
my $Up = 2;
my $Down = 3;
$status = "Failed";
push @details, $Up, $Down;
my $detailMsg = join(",", @details);
return [$status, $detailMsg];
}
my $info = &getStatus();
my $status = ${@$info}[0];
my $detailMsg = ${@$info}[1];
print $status;
print $detailMsg;
exit 0;
-----------------------
Now debugging using perl -d option.
-----------------------
Loading DB routines from perl5db.pl version 1.28
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(test.pl:19): my $info = &getStatus();
DB<1> n
main::(test.pl:20): my $status = ${@$info}[0];
DB<1> n
main::(test.pl:20): my $status = ${@$info}[0];
DB<1> n
Bizarre copy of ARRAY in leave at test.pl line 20.
at test.pl line 20
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.
DB<1>
请建议任何解决方案。如果这与perl模块中的问题有关,那么我们如何克服。请建议。
答案 0 :(得分:1)
${@$info}[0]
是令人厌恶的。 $info
是getStatus
子的返回值。它是一个数组引用。然后,@$info
是解除引用的数组。但是,您在标量上下文中对其进行评估,因此它的计算结果为2
。然后尝试将其作为数组引用进行评估,并获取其第一个元素。
PS:不要使用&getStatus()
。 getStatus()
是调用子资源的正确方法。
PPPS:你可能确实想要$info->[0]
,但很难确定,因为你写的内容太奇怪了。