perl – 在eval {}语句中的If()语句之后定义empty {}
我目前正在尝试记录一个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. 我怀疑的目的是检查这个.>从技术上讲,它也清除$@. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |