我是新手学习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