鉴于模块文件test.pm6:
constant $AUTHOR='me';
和脚本test_script.p6:
use lib '.'; use test; my $AUTHOR = 'someone';
编译check_script.p6时,我收到以下警告:
perl6 -c test_script.p6 Potential difficulties: Redeclaration of symbol '$AUTHOR' at test_script.p6:5 ------> my $AUTHOR⏏ = 'someone'; Syntax OK
但是,只需将test.pm6更改为以下之一就会使此警告消失:
my $AUTHOR='me';
要么
my constant $AUTHOR='me';
那么,问题是应该自动导入常量还是这个bug?
这是在CentOS Linux 7.3.1611版(Core)上安装Rakudo Star 2017.01 Release Candidate 0.
解决方法
这不是一个错误.常量是我们默认的范围,test.pm6中的常量仍然在主线中,因此放入GLOBAL命名空间,因为它是我们的,它在主脚本中可见.
避免它的一种方法是你发现:使用我的常量/类(因为它们默认为我们的).或者相反,使用我们想要显示的子程序/变量(作为默认为我的子程序).
另一种方法是使用单位模块BlahBlah;在模块文件的顶部,然后这些符号将在BlahBlah名称空间而不是在GLOBAL中,因此不会直接在主脚本中显示(我们的符号仍然可以作为BlahBlah :: whatever访问)
P.S.:2016年Rakudos上的那些将不会观察到这种行为,因为lexical module loading bug仅在2017.01编译器版本中得到修复(并且在2016.12编译器发布后的几天内合并到掌握)
原文地址:https://www.jb51.cc/Perl/172297.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。