有人可以提供从Perl 6开始的材料链接吗?还有人可以指出已经用Perl 6开发的真实应用程序吗?
perl6/Rakudo是否有相当于perl5 __DATA__或__END__部分的东西?
部署使用外部模块的Perl 6脚本的最佳策略是什么LWP::Simple?
例如在Perl中我们有PAR.Perl 6中是否有一个选项可以部署一个自包含的脚本,用户只需要在不安装Rakudo和外部Perl 6模块的情况下运行它就可以运行?
在Perl 5和Perl 6之间差异的总结中,注意到该wantarray功能已经消失:
wantarray()走了
wantarray走了.在Perl 6中,上下文向外流动,这意味着例程不知道它在哪个上下文中.
相反,你应该返回在每个上下文中做正确事情的对象.
有人可以举例说明如何创建这样的对象吗?
在Perl 5中,我可以创建一个字符串的文件句柄,并从字符串中读取或写入,就好像它是一个文件一样.这非常适合使用测试或模板.
例如:
use v5.10; use strict; use warnings;
my $text = "A\nB\nC\n";
open(my $fh, '<', \$text);
while(my $line = readline($fh)){
print $line;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在Perl 6中做到这一点?以下不为Perl 6的工作(至少对于上运行我的Perl6的实例MoarVM 2015.01从Rakudo星2015年1月发布 64位的CentOS 6.5):
# Warning: This code does not work
use v6;
my $text = "A\nB\nC\n";
my $fh = $text;
while (my $line = $fh.get ) {
$line.say;
}
# Warning: Example of nonfunctional code
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
No such method 'get' for invocant of type 'Str'
in block <unit> …Run Code Online (Sandbox Code Playgroud) 我最近在维基百科页面查看依赖类型,我很想知道; Perl 6实际上是否引入了依赖类型?我似乎找不到可靠的消息来源.
这对某些人来说可能是显而易见的,但对我来说这肯定不明显.
考虑这个代码需要一段时间才能完成.所有块同时运行(立即输出)然后休眠.大部分都没有完成,因为程序结束的时间越早,他们就会:
my $supply = Supply.interval(0.2);
my $tap = $supply.tap: { say "1 $^a"; sleep 5; };
sleep 5;
Run Code Online (Sandbox Code Playgroud)
输出(省略)有25行(每个刻度为1,每5秒为0.2):
1. 0
1. 1
...
1. 24
Run Code Online (Sandbox Code Playgroud)
然后我将供应改为.share:
my $supply = Supply.interval(0.2).share;
my $tap = $supply.tap: { say "1. $^a"; sleep 5 };
sleep 5;
Run Code Online (Sandbox Code Playgroud)
我只看到一行输入,但我期望相同的输出:
1. 1
Run Code Online (Sandbox Code Playgroud)
这.share使得多个分接头可以获得相同的值.
my $supply = Supply.interval(0.2).share;
my $tap = $supply.tap: { say "1. $^a"; sleep 5 };
my $tap2 = $supply.tap: { say "2. $^a"; };
sleep 5;
Run Code Online (Sandbox Code Playgroud)
输出仍然仅为第一个抽头输出,但仍然只有一行.我预计每行25行:
1. …Run Code Online (Sandbox Code Playgroud) 我认为Rakudo几年前获得了终结器支持,但我找不到它的文档(也许它在Classes和Objects中).列出类中的所有方法似乎不是我想要的东西.
class Butterfly {
method DESTROY { put "Destroyed" }
# submethod DESTROY { put "Destroyed" }
}
{
Butterfly.new;
}
Run Code Online (Sandbox Code Playgroud)
也许问题是#127243:[RFC] DESTROY没有在解释器退出时调用
啊,并在烤/ S12-construction/destruction.t中标记为"待办事项" .
我对双连接应该如何工作感到困惑.
这有点道理:
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'现在在右边.
Perl 5有encodingpragma或Filter::Encoding模块,但是,我没有在Perl 6中发现任何类似的东西.我想最终会创建源过滤器,但是暂时,你能在Perl 6脚本中使用其他编码吗?