2014-10-01 94 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