我是新手學習perl。我的問題是,如何確保如果地雷沒有設置,過了一段時間後,我需要發送一個錯誤或異常?Perl while循環和死
while (my ($a, $b) = each %$him) {
if (($c->{$d}) eq $a) {
$mine = $b;
}
}
這裏我必須返回錯誤,如果$ mine沒有設置。
我是新手學習perl。我的問題是,如何確保如果地雷沒有設置,過了一段時間後,我需要發送一個錯誤或異常?Perl while循環和死
while (my ($a, $b) = each %$him) {
if (($c->{$d}) eq $a) {
$mine = $b;
}
}
這裏我必須返回錯誤,如果$ mine沒有設置。
這整個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} };
「不」呢?它會變得更加自然:) – gaussblurinc
@loldop,人們不喜歡COBOL是有原因的。簡潔,視覺上獨特的操作員是有價值的。 – ikegami
您的整個循環有點奇怪,因爲您的循環變量$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
產生致命錯誤。
您可以使用Perl的defined功能,如下所示:
if (!defined($mine)) {
# produce error here
}
和'$ C - > {$ d}'是 「地雷」? '$ d'從哪裏來?您應該考慮使用更合適的自我記錄變量名稱。 – TLP