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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |