如何仅从Perl6 :: Controls导入for?

时间:2018-08-02 13:46:27

标签: perl

测试用例:

use 5.026;
use Perl6::Controls qw(for);

for (1..10) -> $n {
    say $n;
}

loop {};

期望:

没有包或对象引用就无法调用方法“循环”

知道:

无限循环

2 个答案:

答案 0 :(得分:5)

use Perl6::Controls qw(for);
BEGIN {
    delete $^H{'Keyword::Simple/keywords'}{"loop"};
}
...

我偶然发现通过B::Deparse运行您的脚本。


要选择要保留的关键字,您可以说

use Perl6::Controls;
BEGIN {
    my @keep = ...;    # e.g.  @keep = qw(for);
    my %keywords;
    @keywords{@keep} = @{$^H{'Keyword::Simple/keywords'}}{@keep};
    $^H{'Keyword::Simple/keywords'} = \%keywords;
}

答案 1 :(得分:1)

不能。查看Perl6::Controls的源代码,它使用它自己的导入方法来使用Keyword::Declare定义所有新关键字。它会忽略在使用行上传递的任何参数。