perl代码出错 - “离开的ARRAY的奇怪副本”

时间:2015-05-21 02:20:19

标签: perl debugging

我在这个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模块中的问题有关,那么我们如何克服。请建议。

1 个答案:

答案 0 :(得分:1)

${@$info}[0]是令人厌恶的。 $infogetStatus子的返回值。它是一个数组引用。然后,@$info是解除引用的数组。但是,您在标量上下文中对其进行评估,因此它的计算结果为2。然后尝试将其作为数组引用进行评估,并获取其第一个元素。

确实很奇怪。错误消息非常合适。

PS:不要使用&getStatus()getStatus()是调用子资源的正确方法。

PPPS:你可能确实想要$info->[0],但很难确定,因为你写的内容太奇怪了。