2012-12-11 102 views
0

我是新手學習perl。我的問題是,如何確保如果地雷沒有設置,過了一段時間後,我需要發送一個錯誤或異常?Perl while循環和死

while (my ($a, $b) = each %$him) { 
    if (($c->{$d}) eq $a) { 
     $mine = $b; 
    } 
} 

這裏我必須返回錯誤,如果$ mine沒有設置。

+1

和'$ C - > {$ d}'是 「地雷」? '$ d'從哪裏來?您應該考慮使用更合適的自我記錄變量名稱。 – TLP

回答

1

這整個while循環是不必要的。你只需要

die if !exists($him->{ $c->{$d} }); 
my $mine = $him->{ $c->{$d} }; 

你可能更喜歡

# If doesn't exist or isn't defined 
die if !defined($him->{ $c->{$d} }); 
my $mine = $him->{ $c->{$d} }; 

# If doesn't exist, isn't defined, or is false. 
die if !defined($him->{ $c->{$d} }); 
my $mine = $him->{ $c->{$d} }; 
+0

「不」呢?它會變得更加自然:) – gaussblurinc

+0

@loldop,人們不喜歡COBOL是有原因的。簡潔,視覺上獨特的操作員是有價值的。 – ikegami

1

您的整個循環有點奇怪,因爲您的循環變量$a$b與變量$c$d無關。還請注意,您不應使用$a$b,因爲它們保留用於sort函數。因此,如ikegami所述,您的循環完全是多餘的,除非您輸入錯字,並且意味着$b而不是$d

$c->{$b}假設是「我的」和「未設置」的意思是「未定義」:

while (my ($a, $b) = each %$him) { 
    unless (defined $c->{$b}) {  # the value for this key is undefined 
     warn "Undefined mine!";  # produce warning message 
     next;       # skip to next loop iteration 
    } 
    .... 
} 

也可以使用die產生致命錯誤。

0

您可以使用Perl的defined功能,如下所示:

if (!defined($mine)) { 
    # produce error here 
}