Ana*_* Wu 2 optimization perl logic
这是一个后续问题这一个.
例如,假设我有三个程序需要运行,无论如何,如果所有程序都返回1则退出.
while (&proc1 && &proc2 && &proc3);
Run Code Online (Sandbox Code Playgroud)
因为Perl正在使用短路评估,所以代码可能会也可能不会执行subs&proc2和&proc3,具体取决于前面的操作数(如果操作数为false,则不会执行以下操作数; 此处和wiki上的更多信息).如果需要,有没有办法关闭该功能?
您可以只将每个子句计算为临时变量,然后计算整个表达式.例如,为了避免在以下方面进行短路评估:
if ($x < 10 and $y < 100) { do_something(); }
Run Code Online (Sandbox Code Playgroud)
写:
$first_requirement = ($x < 10);
$second_requirement = ($y < 100);
if ($first_requirement and $second_requirement) { do_something(); }
Run Code Online (Sandbox Code Playgroud)
将评估两个条件.据推测,您需要更复杂的副作用条件,否则如果第一个条件为假,则没有理由评估第二个条件.
你可以写
until ( grep !$_, proc1(), proc2(), proc3() ) {
...
}
Run Code Online (Sandbox Code Playgroud)
无论你做什么,你都不应该使用和号语法来调用子程序,比如&proc1.多年来一直是错误的,取而代之的是proc1()
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |