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

Perl中的静态局部变量

发布时间:2020-12-15 21:27:45 所属栏目:大数据 来源:网络整理
导读:我正在寻找关于Perl最佳实践的建议.我写了一个复杂的正则表达式的脚本: my $regex = qr/complicated/;# ...sub foo { # ... if (/$regex/) # ...} 其中foo是一个经常被调用的函数,$regex在该函数之外不被使用.处理这样的情况最好的办法是什么?我只想把它解
我正在寻找关于Perl最佳实践的建议.我写了一个复杂的正则表达式的脚本:
my $regex = qr/complicated/;

# ...

sub foo {
  # ...

  if (/$regex/)
  # ...
}

其中foo是一个经常被调用的函数,$regex在该函数之外不被使用.处理这样的情况最好的办法是什么?我只想把它解释一次,因为它是漫长而复杂的.但是在全局范围内看起来好像有点问题,因为它只在该子系统中使用.有合理的方式来声明它是静态的吗?

另一个可能是不合理的全球性也出现了类似的问题.它读取当前日期和时间并适当地格式化.这也被使用了很多次,而且仅在一个功能中使用.但是在这种情况下,更重要的是它不会被重新初始化,因为我希望日期时间的所有实例从脚本的给定调用中都是相同的,即使在执行期间分钟滚动也是如此.

目前我有点像

my ($regex,$DT);

sub driver {
  $regex = qr/complicated/;
  $DT = dateTime();
  # ...
}

# ...

driver();

这至少有点隔离.但也许有更好的方法.

再次:我正在寻找正确的方法来做到这一点,遵循以下最佳实践和Perl习语.性能很好,但是如果我不能拥有一切,可读性和其他需求就会优先.

解决方法

如果您使用的是perl 5.10,请使用状态变量.
use feature 'state';
# use 5.010; also works

sub womble {
    state $foo = something_expensive();
    return $foo ** 2;
}

只会打电话给一些廉价的一次.

如果您需要使用旧的Perl,那么在外部范围中使用一个词法变量,并使用一对额外的大括号:

{
    my $foo = something_expensive();
    sub womble {
        return $foo ** 2;
    }
}

这让$foo从泄漏到任何人,除了womble.

(编辑:李大同)

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

    推荐文章
      热点阅读