【问题标题】:Perl while loop and diePerl while 循环并死掉
【发布时间】:2012-11-29 14:25:42
【问题描述】:

我是学习 perl 的新手。我的问题是如何确保如果没有设置我的,在一段时间之后,我需要发送错误或异常?

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

这里如果 $mine 没有设置,我必须返回错误。

【问题讨论】:

  • 而$c->{$d} 是“我的”? $d 是从哪里来的?您应该考虑使用更合适且自记录的变量名称。

标签: perl while-loop die


【解决方案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} };

【讨论】:

  • not 怎么样?它会变得更自然:)
  • @loldop,人们不喜欢 COBOL 是有原因的。简洁、具有视觉特色的运算符很有价值。
【解决方案2】:

您的整个循环有点奇怪,因为您的循环变量$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,这会产生致命错误。

【讨论】:

    【解决方案3】:

    可以使用Perl的defined函数,如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-14
      • 2019-02-07
      • 1970-01-01
      • 2013-02-10
      • 2010-10-26
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      相关资源
      最近更新 更多