2012-12-11 65 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 
}