为什么要使用“do {} if”? Perl 中的块?

发布于 2024-12-15 16:43:48 字数 409 浏览 0 评论 0原文

在浏览 CPAN 时,我在 this 中遇到了一段代码模块 难倒了我。

sub import {
  for my $mod (keys %INC) {
    do {
      delete $INC{$mod};
      $mod =~ s/\.pm$//; $mod =~ s/\//::/g;
      delete_package($mod);
    } if $mod =~ m/^SOAP/;
  }
}

为什么作者要使用 do {} if 块而不是常规的 if 块?

While browsing CPAN, I came across a block of code in this module that stumped me.

sub import {
  for my $mod (keys %INC) {
    do {
      delete $INC{$mod};
      $mod =~ s/\.pm$//; $mod =~ s/\//::/g;
      delete_package($mod);
    } if $mod =~ m/^SOAP/;
  }
}

Why would the author use a do {} if block instead of a regular if block?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

财迷小姐 2024-12-22 16:43:48

因为他们喜欢这样。没有什么真正的区别。 Perl 有十几种方法可以完成所有事情。语言就是这样。

Because they feel like it. There's no real difference. Perl has like a dozen ways to do everything. It's just the way the language is.

似狗非友 2024-12-22 16:43:48

一个区别是 do { ... } 返回一个值,而 if 语句则不返回值(尽管请参阅下面的注释。)

例如:

my $x = 3;
my $z = do { warn "in the do block"; 10 } if $x == 3;

您可以使用三元运算符完成几乎相同的事情,尽管您无法对三元运算符的分支内的语句进行排序。

One difference is that do { ... } returns a value whereas an if statement doesn't (although see the comments below.)

E.g.:

my $x = 3;
my $z = do { warn "in the do block"; 10 } if $x == 3;

You can accomplish almost the same thing with the ternary operator, although you can't sequence statements inside the branches of the ternary operator.

攀登最高峰 2024-12-22 16:43:48

对我来说,这似乎是一种强调 if 内部代码而不是 if 条件本身的方法。

To me, it seems like a way to emphasize the code inside the if more than the if condition itself.

柠檬心 2024-12-22 16:43:48

作者想在最后使用if,但它必须在一个语句的末尾,数量不多。 do {} 是一个语句,因此可以工作。

就我个人而言,我会使用 if 语句,但重点应该放在操作还是条件上是一个品味问题。在这种情况下,作者选择强调行动。

The author wanted to use the if at the end, but it has to be at the end of one statement not many. A do {} is one statement, so that will work.

Personally, I would use an if statement, but it is a matter of taste whether the emphasis should be on the action or the condition. In this case the author chose to emphasize the action.

揽月 2024-12-22 16:43:48

因为在 Perl 中“有不止一种方法可以做到这一点”

Because in perl "There's more than one way to do it"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文