2014-10-01 95 views
-1

ss1。 ss2我是Perl的新手,我有一个简单的问题。我有一个if else声明。返回声明在perl

if ($response->is_success) { 
    do something; 
} else { 
    my @vals = foo(); 

    sub foo { 
     return 
      "Total closed cases:0", 
      "Total pending cases:0", 
      "Total resolved cases:0", 
      "Total assigned cases:0"; 
    } 
} 

我知道这是不可能给一个以上的return语句,但响应了所有4例counts.So的计数。如果它没有找到任何4个案例之一计算,应该说如。总闭包数:0“或总解决案例数:0等。所以这就是为什么要给return语句的原因。我如何在一个return语句中给出所有4个语句,或者如果我需要再次使用else来获得我的结果。这一点,它抛出的错误)。任何帮助深表感谢。

感谢

+0

所有评论去了哪里? – javalearner 2014-10-01 19:25:06

+0

另一件需要考虑的事情是,我注意到你在'if' /'else'声明中声明了一个子例程。在Perl中,即使你在一个'if'语句或另一个子例程中声明了一个子例程,它仍然可以在if语句或其定义的子例程之外看到。这可能会导致不可预知的结果,并且不鼓励。词汇范围的子程序在Perl中仍然是实验性的:http://perldoc.perl.org/perlsub.html#Lexical-Subroutines – tjwrona1992 2014-10-02 12:31:04

+0

感谢tjwrona的输入。 – javalearner 2014-10-07 23:27:52

回答

1

它可能会让你大吃一惊,但Perl会实际上允许您返回多个变量˚F从一个子程序!

见链接了解详细信息: http://perlmeme.org/faqs/perl_thinking/returning.html

我会然而,这种情况下做的,是输出

sub foo { 
    my %cases =(); 

    $cases{closed} = 0; 
    $cases{pending} = 0; 
    $cases{resolved} = 0; 
    $cases{assigned} = 0; 

    return %cases; 
} 

# accessing cases outside of the subroutine 
my %hash = foo(); 

print "CLOSED : $hash{closed}\n"; 
print "PENDING : $hash{pending}\n"; 
print "RESOLVED: $hash{resolved}\n"; 
print "ASSIGNED: $hash{assigned}\n"; 
创建哈希

输出将如下所示:

CLOSED : 0 
PENDING : 0 
RESOLVED: 0 
ASSIGNED: 0 

哈希函数非常适合按名称存储多个值并稍后查找它们,它们在传递大量数据时非常有用b在功能之间。关于哈希

详情: http://www.cs.mcgill.ca/~abatko/computers/programming/perl/howto/hash/

您也可以通过引用传递哈希值,如果你有,你不想占用大量内存的大型数据结构,但我建议学习如何使用在学习如何通过引用传递它们之前进行散列。

+0

非常感谢您的回答。我会试试看! – javalearner 2014-10-01 20:09:44