加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 在eval {}语句中的If()语句之后定义empty {}

发布时间:2020-12-15 23:22:44 所属栏目:大数据 来源:网络整理
导读:我目前正在尝试记录一个Perl脚本,以准备将其转换为.NET.我之前没有Perl的经验,但是我设法通过很多Google-fu来完成它.我遇到了阻止我的一行代码,因为我不确定它的作用.我已经能够弄清楚它的大部分,但我错过了一块,我不知道它是否真的那么重要.这是代码行: ev
我目前正在尝试记录一个Perl脚本,以准备将其转换为.NET.我之前没有Perl的经验,但是我设法通过很多Google-fu来完成它.我遇到了阻止我的一行代码,因为我不确定它的作用.我已经能够弄清楚它的大部分,但我错过了一块,我不知道它是否真的那么重要.这是代码行:

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

我知道定义的是检查变量$timeEnd和$timeStart以查看它们是否为null / nothing / undef.我还认为eval块被用作Try / Catch块来捕获任何异常.代码行在foreach循环中,所以我相信下一个关键字将继续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

解决方法

忽略elsif和else子句,if语句的语法如下:

if (EXPR) BLOCK

如果EXPR评估为true,则执行该块.块由大括号中的语句列表组成.代码中的{}是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.

我怀疑的目的是检查这个.>从技术上讲,它也清除$@.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读