gpt4 book ai didi

perl - eval{} 语句中 If() 语句后空 {} 的定义

转载 作者:行者123 更新时间:2023-12-04 22:57:55 25 4
gpt4 key购买 nike

我目前正在尝试记录 Perl 脚本以准备将其转换为 .NET。我之前没有使用 Perl 的经验,但是我设法通过大量的 Google-fu 来完成它。我遇到了一行代码,它阻止了我,因为我不确定它的作用。我已经能够弄清楚大部分,但我遗漏了一部分,我不知道它是否真的那么重要。这是代码行:

eval { if(defined $timeEnd && defined $timeStart){}; 1 } or next;

我知道 defined正在检查变量 $timeEnd$timeStart看看他们是不是 null/ nothing/ undef .我也相信 eval块被用作 Try/Catch 块来捕获任何异常。这行代码在 foreach 中循环所以我相信 next关键字将在 foreach 的下一次迭代中继续环形。

我难以破译的部分是 {};1少量。我的理解是 ;是 Perl 中的语句分隔符,因为它没有用反斜杠转义,所以我不知道它在那里做什么。我也不知道是什么 {}方法。我认为它与数组有关,但它是一个空数组,我不知道当它紧跟在 if() 之后时是否意味着什么特别的东西。堵塞。最后,我不知道 1 的单个整数是多少在 eval 的末尾意味着并且正在那里做堵塞。

如果有人可以将这行代码分解为单独的部分及其定义,我将不胜感激。

奖励:如果你能给我一个 .NET 转换,以及每个 Perl 位与它的关系,我肯定会给你我的互联网方面的尊重。下面是我如何将它转换为 VB.NET 与我现在知道的:

For each element in xmlList    'This isn't in the Perl code I posted, but it's the `foreach` loop that the code resides in.
Try
If Not IsNothing(timeEnd) AND Not IsNothing(timeStart) then
End If
Catch ex as Exception
Continue For
End Try
Next

最佳答案

忽略 elsifelse子句中,if 语句的语法如下:

if (EXPR) BLOCK

如果 EXPR 的计算结果为真,则执行该块。块由花括号中的语句列表组成。 {}在您的代码中是 if 的块陈述。

块为空(包含零语句列表)是完全有效的。例如,
while (s/\s//) { }

是一种低效的做事方式
s/\s//g;

问题是,下面的条件没有副作用,所以它很没用:
if(defined $timeEnd && defined $timeStart){}

它甚至不能抛出异常![1] 所以
eval { if(defined $timeEnd && defined $timeStart){}; 1 } or next;

相当于
eval { 1 } or next;

这相当于[2]
1 or next;

这相当于
# Nothing to see here...

  • 从技术上讲,如果变量是神奇的,它就可以。
    $ perl -MTie::Scalar -e'
    our @ISA = "Tie::StdScalar";
    tie(my $x, __PACKAGE__);
    sub FETCH { die }
    defined($x)
    '
    Died at -e line 4.

    我怀疑目的是检查这一点。
  • 从技术上讲,它还清除了 $@ .
  • 关于perl - eval{} 语句中 If() 语句后空 {} 的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615247/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com