有人可以提供从Perl 6开始的材料链接吗?还有人可以指出已经用Perl 6开发的真实应用程序吗?
perl6/Rakudo是否有相当于perl5 __DATA__或__END__部分的东西?
我有两个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 6中的最后一个元素
@array[*-1]
Run Code Online (Sandbox Code Playgroud)
为什么我们需要星号*?
做这样的事情不是更合乎逻辑:
@array[-1]
Run Code Online (Sandbox Code Playgroud) 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)
我做得不对(咳咳)?
我正在玩这个小东西,其中一组可以通过翻转测试来充当它的补充.为了实现这一目标,我创建了会员运营商的特殊版本.
class Complement {
has $.set;
}
multi infix:<?> ( $a, Complement:D $c ) { $a ? $c.set }
multi infix:<?> ( $a, Complement:D $c ) { $a ? $c.set }
my $set = (1, 2, 3).Set;
my $c = Complement.new: set => $set;
put 3 ? $set;
put 4 ? $c;
Run Code Online (Sandbox Code Playgroud)
根据我infix:<?>对另一个的定义,更普遍的似乎已经消失了.没有其他候选人:
True
Cannot resolve caller infix:<?>(Int, Set); none of these signatures match:
($a, Complement:D $c)
in sub infix:<?> at /Users/brian/Desktop/complement.p6 line 11
in block <unit> at …Run Code Online (Sandbox Code Playgroud) 因为-->是perl6中签名中声明返回类型的首选方法,我想知道是否可以将函数签名的代码放入其中C<...>.
例如 C<foo(Int $a --> Bool)>
调试一些代码最终测试了语句中的差异,例如$counter=$counter + 1;vs$counter+=1;
my $run=True;
my $counter=0;
my $sup=Supply.interval(1);
my $tap= $sup.tap({
$run=$_ < 10;
});
{
while $run {
#$counter+=1;
$counter=$counter + 1;
}
$tap.close;
say "Iterations per second: {$counter/(now - ENTER now)}"; #
}
Run Code Online (Sandbox Code Playgroud)
与之$counter=$counter+1相比, 我每秒获得约20%的迭代$counter+=1;
在后台发生了什么,那是如此不同?
编辑:
有趣的是,当使用数组和超级运算符尝试此操作时,使用时性能会大大 提高+=。
例如,
@counter=@counter>>+<<@value;
与
10_000个元素的数组一起@counter>>+=<<@value;
使用>>+=<<,我得到的循环迭代次数约为2.8倍。
据我可以通过timecmd 得知,在任何一种情况下,并行执行最少(总用户+系统在实时的2%之内)。
关于如何/为什么这样的任何见解都是很棒的。谢谢!
Perl 6中同时存在占位符变量和主题变量。例如,以下两个语句相同
say ( $_ * 2 for 3, 9 ); # use topic variables
say ( { $^i * 2 } for 3, 9 ); # use placeholder variables
Run Code Online (Sandbox Code Playgroud)
在我看来,从主题变量中获得的唯一好处就是节省了一些键盘笔触。
我的问题是:是否存在用例,其中主题变量比占位符变量方便得多?
我最近尝试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)
为什么会这样呢?