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

perl – 本地和语句修饰符(例如postfix if)

发布时间:2020-12-15 21:22:36 所属栏目:大数据 来源:网络整理
导读:perlsyn ,“Statement-Modifiers” section明确指出 The behaviour of a my , state ,or our modified with a statement modifier conditional or loop construct (for example, my $x if ... ) is undefined. 不幸的是,这个列表缺少本地,its own documentat
perlsyn,“Statement-Modifiers” section明确指出

The behaviour of a my,state,or our modified with a statement
modifier conditional or loop construct (for example,my $x if ... ) is
undefined.

不幸的是,这个列表缺少本地,its own documentation也没有涵盖其行为.我认为它也是未定义的,文档在这些特定部分中只是不完整.

这实际上是在文档中涵盖的吗?

解决方法

在我的& amp;上使用语句修饰符的未定义行为有限公司等
my $x = 1  if $flag;  # UNDEFINED behavior

是因为my $x声明在编译时发生,而= 1赋值在运行时发生,测试也是如此.因此,整个语句被打破了(它根本不应该分配?),并且这行代码的行为被认为是未定义的.

然而,当地是非常不同的.从perlsub(我的重点)

A local modifies its listed variables to be “local” to the enclosing block,eval,or do FILE –and to any subroutine called from within that block. A local just gives temporary values to global (meaning package) variables. It does not create a local variable.

因此,当地人做的事与我或我们完全不同;它为块的其余部分保存其目标(全局)变量的值,并在从块退出时恢复它.

此外,自local is a run-time operator以来,没有编译与运行时的声明分配问题,如我的$x = 1,因此可以使用后缀条件.考虑

use warnings;
use strict;
use feature 'say';

my $flag = shift or 1;

our $var = 1;

{
    local $var if $flag;
    $var = 2;
    say $var;
}

say $var;

当使用$flag set(script.pl)运行时,本地化发生,最后一个打印显示我们的$var已被保留.使用flag unset(script.pl 0)时,不会发生这种情况,不会为块保存全局值,并最终覆盖.

如果$flag,则使用local $var = 2;本地化和分配都没有发生.

如果只有本地语句本身必须以后缀方式完成,因为本地的效果仅在封闭范围内持续(因此,如果($f){local $var}对其余代码没有任何作用).

这样做可以根据单个条件的单纯值从根本上改变代码行为,并且可能在高级别改变代码行为;我建议仔细使用这些代码.这个简短的程序特别只显示了如何使用后缀条件.感谢ysth和ikegami的评论.

(编辑:李大同)

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

    推荐文章
      热点阅读