尝试通过Perl中的词法绑定来本地化外部包变量
这是一个很长的标题,但我担心在不失去问题的真正含义的情况下我不能说出一个字.我将简要介绍一下我首先想要实现的目标,然后对我为什么希望以这种方式完成这一过程进行漫长的漫游.如果您打算直接回答遵守问题标题,请跳过漫步:-)
简要说明 假设存在一个符合我想要的lexicalize内置,这里有: package Whatever; { lexicalize $Other::Package::var; local $var = 42; Other::Package->do_stuff; # depends on that variable internally } 为什么和whynots 对于一些上下文,我是白盒测试第三方模块. 我希望变量本地化,因为我希望它在有限的时间内更改,然后测试继续进行其他操作.本地是我发现这样做的最佳方式,而不依赖于知道模块对初始值的选择. 我想要一个词法绑定有两个主要原因: >我不想污染测试文件的更高级别的命名空间. 我无法正常使用我们因为它不会从另一个包中获取变量:“没有包名称允许变量$Other :: Package :: var in”my“.”作弊暂时输入其他::包的范围不切断它:如果我使用一个块({package Other :: Package;我们的$var}),那么绑定的持续时间不够长;如果我不这样做(打包Other :: Package;我们的@var;包main),那么我需要知道并复制以前的包名,这样可以防止过多地移动那段代码. 在询问此问题的前一种形式之前做完作业时,我发现了Lexical :: Var,这看起来就像我需要的那样.唉:“不能通过引用进行本地化.” 我也尝试过我对基于* var的表单的直觉,但不断遇到语法错误.我今天学到了更多关于范围和约束的知识:-) 我想不出为什么我想要的东西不可能,但我找不到正确的咒语.我要求一个不幸的未实现的边缘案例吗? 解决方法
我不太确定我是否理解正确.这有帮助吗?
#!/usr/bin/env perl { package This; use warnings; use strict; our $var = 42; sub do_stuff { print "$varn"; } } { package That; use warnings; use strict; use Lexical::Alias; local $This::var; alias $This::var,my $var; $var = 24; print "$varn"; This->do_stuff; } package main; use warnings; use strict; This->do_stuff; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 使用Spring引导的@MockBean时创建严格模拟?
- java – Jersey JAXB如何为List实现MessageBodyWriter
- 在Delphi的XmlDom中使用XPath选中单个IXMLNode / TXmlNode
- LUA的类封装(tolua++工具的使用)
- php – 如何在laravel 5中有条件地更改邮件传输器?
- VB学习要点3----本窗体下Format函数下的操作(包括本窗体下
- vue+springboot实现项目的CORS跨域请求
- perl – Munin mysql插件结果不一致,用IPC :: Sharelite st
- Golang百万级高并发实践
- 单例模式lua实现