gpt4 book ai didi

perl - 'my $x if 0' 技巧是否可用于在 5.10 之前为 Perls 创建静态变量?

转载 作者:行者123 更新时间:2023-12-03 22:52:53 26 4
gpt4 key购买 nike

在 5.10 之前的 Perl 中,没有“状态”声明。

我遇到过在这些 Perls 中创建静态变量的示例:my $x if 0 . if 0条件使变量像静态变量一样:

use strict; use warnings;
add() for 1..7;

sub add {
my @arr = () if 0;

push @arr, '+';
print @arr, "\n";
}

打印:
+
++
+++
++++
+++++
++++++
+++++++

这种行为在 5.10 之前的所有 Perl 版本中是否一致?

最佳答案

my $x if 0的行为是一个错误。它存活了很长时间,因为它有用并因此被使用;修复它会破坏现有的代码。它是一致的,因此可以被认为是可用的,但这并不意味着你应该这样做。从 5.10 开始,此“功能”已被弃用并发出警告:

Deprecated use of my() in false conditional

即使你不能使用 state (即您的代码需要能够在 5.10 之前的 Perl 版本下运行) my $x if 0伎俩只是懒惰。否则使用闭包:
{
my $x;
sub counter {
$x = '1' unless defined $x;
print $x++, "\n";
}
}

关于perl - 'my $x if 0' 技巧是否可用于在 5.10 之前为 Perls 创建静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2161111/

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