标签: perl6

如何在Perl 6中包含文件

我有两个Perl 6文件:

hello.p6:

sub hello
{
    say 'hello';
}
Run Code Online (Sandbox Code Playgroud)

和main.p6:

require 'hello.p6';

hello();
Run Code Online (Sandbox Code Playgroud)

但是不要工作.如何在主脚本中包含第一个文件?

perl-module perl6 raku

14
推荐指数
2
解决办法
1055
查看次数

为什么Perl 6的正确关联性不对?

Clickbaity标题,但它太多了,不能放弃.我有这个运算符,我希望是正确的关联:

sub infix:<?> ( Int:D \n, Int:D \m  --> Int:D )
    is assoc<right>
    is equiv(&infix:<**>)
    { n ** m }

put "2**2**2**2 = ",      2**2**2**2;
put "2?2?2?2 = ",         2?2?2?2;
put "2? (2? (2?2) ) = ",  2? (2? (2?2) );
Run Code Online (Sandbox Code Playgroud)

这是不正确的联想:

2**2**2**2 = 65536
2?2?2?2 = 256
2? (2? (2?2) ) = 65536
Run Code Online (Sandbox Code Playgroud)

我做得不对(咳咳)?

perl6 associativity raku

14
推荐指数
1
解决办法
289
查看次数

Perl6:比较运算符~~

我不明白这种行为:

> sort([1,2,3,4]) ~~ sort([1,2,3,4])
False
Run Code Online (Sandbox Code Playgroud)

你能解释一下吗?根据Perl 6,为什么这两个列表(显然相等)不相等.

更新

有趣,但它取决于Perl6版本(我刚刚注意到它):

$ which perl6
/usr/bin/perl6
$ dpkg -S `which perl6`
rakudo: /usr/bin/perl6
$ perl6 --version
This is perl6 version 2015.11 built on MoarVM version 2015.11
$ perl6
> sort([1,2,3]) ~~ sort([1,2,3])
True
> 
$ export PATH=~/.rakudobrew/bin:$PATH
$ perl6 --version
This is Rakudo version 2017.12 built on MoarVM version 2017.12.1
implementing Perl 6.c.
$ perl6
To exit type 'exit' or '^D'
> sort([1,2,3]) ~~ sort([1,2,3])
False
> 
Run Code Online (Sandbox Code Playgroud)

从#perl6的讨论开始:

[19:35] <+committable6> AlexDaniel, 
¦2015.12,2016.01.1,2016.02,2016.03,2016.04,2016.05,2016.06,2016.07.1,2016.08.1,2016.09,2016.10,2016.11,2016.12: …
Run Code Online (Sandbox Code Playgroud)

operators perl6 raku

14
推荐指数
2
解决办法
394
查看次数

声明并初始化范围内的类型化数组

我最近尝试my Array @a = 'a'..'z';my Array @a = @('a'..'z');

两者都会产生以下错误:

Type check failed in assignment to @a; expected Array but got Str ("a")
in block <unit> at <unknown file> line 1
Run Code Online (Sandbox Code Playgroud)

但是,在没有类型的情况下进行初始化会起作用,并且似乎最终会产生一个Array:

> my @a = 'a'..'z';
> @a.^name
Array
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

arrays typing range perl6 raku

14
推荐指数
3
解决办法
206
查看次数

如何在Perl 6中返回上下文敏感的返回值?

在Perl 5和Perl 6之间差异的总结中,注意到该wantarray功能已经消失:

wantarray()走了

wantarray走了.在Perl 6中,上下文向外流动,这意味着例程不知道它在哪个上下文中.

相反,你应该返回在每个上下文中做正确事情的对象.

有人可以举例说明如何创建这样的对象吗?

perl perl6 perl5 raku

13
推荐指数
1
解决办法
419
查看次数

Perl 6中的postfix或postcircumfix之前的点是什么意思?

在Perl文档中,有一个关于.postfix/.postcircumfix的部分,它说

在大多数情况下,可以在后缀或后缀之前放置一个点:

my @a;
@a[1, 2, 3];
@a.[1, 2, 3]; # Same
Run Code Online (Sandbox Code Playgroud)

从技术上讲,不是真正的运营商; 它的语法特殊于编译器.

我试过自己:

> my @a = 1,2,3,4,5
> @a[1]  # 2
> @a.[1] # 2

> my %a = Perl => 6, Python => 3, PHP => 7
> %a<Perl>  #6
> %a.<Perl> #6

> my @weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
> @weekdays.antipairs.hash{'Sunday'}  # 6, I expected it to be syntax wrong, but it did work!
> @weekdays.antipairs.hash.{'Sunday'} # 6, seems …
Run Code Online (Sandbox Code Playgroud)

grammar compilation perl6 postfix-operator raku

13
推荐指数
1
解决办法
236
查看次数

双连接参数交换边

我对双连接应该如何工作感到困惑.

这有点道理:

say all('a', 'b', 'c') ~ any('d', 'e');
Run Code Online (Sandbox Code Playgroud)

all(any(ad, ae), any(bd, be), any(cd, ce))
Run Code Online (Sandbox Code Playgroud)

这没有意义:

say any('a', 'b', 'c') ~ all('d', 'e');
Run Code Online (Sandbox Code Playgroud)

all(any(da, db, dc), any(ea, eb, ec))
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为我希望在字母'd'左边的字母'a'现在在右边.

perl6 perl6-junction raku

13
推荐指数
1
解决办法
243
查看次数

为什么Perl 6 REPL中没有新的运算符定义?

我在试验在Perl 6 REPL上定义运算符时遇到了问题,并注意到它们确实有效,但只有在它们被定义的同一行上使用时才会有效.为什么会这样?

> sub postfix:<!>(Int $x where { $x >= 0 }) { [*] 1..$x }; 6!;
720
> 6!;
===SORRY!=== Error while compiling:
Negation metaoperator not followed by valid infix
------> 6!?;
    expecting any of:
        infix
        infix stopper
Run Code Online (Sandbox Code Playgroud)

operators user-defined-functions perl6 read-eval-print-loop raku

13
推荐指数
1
解决办法
187
查看次数

你能用非utf8编码编写Perl 6脚本吗?

Perl 5有encodingpragmaFilter::Encoding模块,但是,我没有在Perl 6中发现任何类似的东西.我想最终会创建源过滤器,但是暂时,你能在Pe​​rl 6脚本中使用其他编码吗?

encoding perl6 raku

13
推荐指数
2
解决办法
200
查看次数

原始令牌候选者排序

perl6如何确定proto token首先匹配哪个?

下面的代码按预期方式工作,它与string匹配1234,并Grammar::Tracer显示与之匹配的第一个标记是s:sym<d>,这是有意义的,因为它是最长的标记。

但是,如果我将文字更改为令牌,例如,将token threeform 更改'3'<digit>,它将无法匹配,并Grammar::Tracer显示s:sym<b>与first匹配。

移动s:sym<d>到顶部,在两种情况下都匹配字符串,但是对该行为的解释是什么?

#!/usr/bin/env perl6
no precompilation;
use Grammar::Tracer;

grammar G {

  token TOP { <s> }

  proto token s { * }

  token s:sym<a> { <one> }
  token s:sym<b> { <one> <two> }
  token s:sym<c> { <one> <two> <three> }
  token s:sym<d> { <one> <two> <three> <four> }

  token one   { '1' }
  token two …
Run Code Online (Sandbox Code Playgroud)

regex grammar perl6 raku

13
推荐指数
1
解决办法
99
查看次数