我正在使用rakudo,以下代码:
"foo" ~~ m/(foo)/;
say $0;
Run Code Online (Sandbox Code Playgroud)
我认为输出将是:
foo
Run Code Online (Sandbox Code Playgroud)
但是,我得到:
?foo?
Run Code Online (Sandbox Code Playgroud)
(这是foo,周围有一些奇怪的unicode-y引号.)
我在文档中找不到任何相关内容,我似乎无法摆脱这些引用.这里发生了什么事?
编辑:做
say "$0";
Run Code Online (Sandbox Code Playgroud)
而是摆脱了引号,两者兼而有之
print $0;
print "$0";
Run Code Online (Sandbox Code Playgroud)
也做.所以我猜捕获实际上不是一个字符串,并在它周围加上双引号将它变成一个字符串?(顺便说一下,$ 0.gist产生"foo",而不是foo.)有人能指出我可以了解这个行为的文档部分吗?我来自Perl,并且彻底迷茫.
类型对象总是未定义的,但我已经看到了一些使用的测试.defined和一些使用的测试.DEFINITE.有什么情况可能会有所不同吗?我倾向于认为任何大写的方法都不适合日常工作,而是更喜欢.defined这项任务.
my $class = IntStr;
put '-' x 20; # False
put $class.DEFINITE;
put $class.defined;
put '-' x 20; # False
$class = Nil;
put $class.DEFINITE;
put $class.defined;
put '-' x 20; # True
$class = '';
put $class.DEFINITE;
put $class.defined;
Run Code Online (Sandbox Code Playgroud)
在输出中,我正在寻找两种方法的答案不同的任何情况:
--------------------
False
False
--------------------
False
False
--------------------
True
True
Run Code Online (Sandbox Code Playgroud) 考虑这个例子
my @fib = (1,1, * + * … * > 200).rotor(2 => -1);
say @fib[0] ? @fib; # prints True
Run Code Online (Sandbox Code Playgroud)
第一个语句通过使用转子函数创建一个2元素子序列.将包含,等等.很明显,序列的第一个元素是序列的一部分.或者是吗?@fib(1,1)(1,2)
my @fib = (1,1, * + * … * > 200).rotor(2 => -1);
say @fib[0], @fib[0].^name; # OUTPUT: «(1 1)List?»
Run Code Online (Sandbox Code Playgroud)
所以第一个元素包含一个值为(1 1)的列表.好吧,让我们来看看
my $maybe-element = (1,1);
say $maybe-element, $maybe-element.^name; # OUTPUT: «(1 1)List?»
say $maybe-element ? @fib; # OUTPUT: «False?»
Run Code Online (Sandbox Code Playgroud)
等等,什么?让我们来看看...
my $maybe-element = @fib[0];
say $maybe-element ? @fib; # OUTPUT: …Run Code Online (Sandbox Code Playgroud) 列表重复运算符(xx)在每次重复时评估列表.例如,
my @input = get() xx 5;
Run Code Online (Sandbox Code Playgroud)
将评估STDIN的前5行.有没有什么方法可以重复5次元素的值,而不是每次都进行评估?目前,我一直在将它分配给变量,然后重复它,但这样看起来有点麻烦.
my $firstLine = get();
my @firstlineRepeated = $firstLine xx 5;
Run Code Online (Sandbox Code Playgroud)
是否有一个前缀或某些东西可以让我在一个声明中做到这一点?
我目前正在尝试改进现有的机制(比较来自2个源的数据,在perl5中实现),并且想要使用perl6.
在未压缩的平面文件中,我的目标数据量范围约为20-30 GB.就行而言,文件可以包含1800万到2800万行.它每行大约有40-50列.
我每天都会进行这种类型的数据协调,从文件中读取并填充哈希值大约需要10分钟.花了大约20分钟来读取这两个文件并填充哈希值.
比较过程大约需要30-50分钟,包括迭代哈希,收集所需的结果,以及写入输出文件(csv,psv).
总而言之,在具有256GB RAM(包括间歇性服务器负载)的32核双xeon cpu服务器上执行此过程可能需要30分钟到60分钟之间的任何时间.
现在我想进一步降低总处理时间.
这是我目前使用perl5的单线程方法.
我想知道我是否可以以某种方式并行执行第一步,即同时从两个源收集数据并填充我的全局哈希,然后继续比较和转储输出?
perl6可以提供哪些选项来处理这种情况?我已经阅读了有关使用perl6的并发,异步和并行操作,但我不确定哪一个可以帮助我.
我非常感谢有关此事的任何一般性指导.我希望我能很好地解释我的问题,但遗憾的是我没有太多东西可以证明我到现在为止做了什么?原因是我刚刚开始解决这个问题.我只是无法看到过去的单线程方法,需要一些帮助.
谢谢.
编辑
由于我现有的问题陈述被社区视为"过于宽泛" - 请允许我尝试突出以下的难点:
我目前的p5比较逻辑如下所示,供您参考.希望这有帮助,不要让这个问题关闭.
package COMP;
use strict;
use Data::Dumper;
sub comp
{
my ($data,$src,$tgt) = @_;
my $result = {};
my $ms = ($result->{ms} = {});
my $mt = ($result->{mt} = {});
my $diff = ($result->{diff} = {}); …Run Code Online (Sandbox Code Playgroud) 我希望有一个从5到1的循环.我知道我可以轻松地与..运算符相反:
for 1..5 { .print }
12345
Run Code Online (Sandbox Code Playgroud)
但是当使用..运算符并反转边时,它似乎不会生成for可以使用的有效范围:
for 5..1 { .print }
Nil
Run Code Online (Sandbox Code Playgroud)
我知道我可以reverse在Range对象上使用该方法:
for (1..5).reverse { .print }
54321
Run Code Online (Sandbox Code Playgroud)
但是,我希望..运营商能够以一定的方式在1次呼叫中生成数字列表.我的问题是,如何创建一个使用..运算符倒计时的Range ?
非常基本的问题,但我似乎无法找到有关文档中多个范围的任何内容.
如何从perl6数组中选择多个范围?
my @a = "a","b","c","d";
@a[0..1,3] # expecting array with a, b & d as p5
Run Code Online (Sandbox Code Playgroud)
这似乎回到一种嵌套列表的,什么是Perl 6的语法acheive结果,这将在Perl 5(即数组一代产量a,b&d)?
在Perl 5,如果我想看到的哈希的内容,我可以使用Data::Show,Data::Dump或Data::Dumper.
例如:
use Data::Show;
my %title_for = (
'Book 1' => {
'Chapter 1' => 'Introduction',
'Chapter 2' => 'Conclusion',
},
'Book 2' => {
'Chapter 1' => 'Intro',
'Chapter 2' => 'Interesting stuff',
'Chapter 3' => 'Final words',
}
);
show(%title_for);
Run Code Online (Sandbox Code Playgroud)
哪个输出:
======( %title_for )======================[ 'temp.pl', line 15 ]======
{
"Book 1" => { "Chapter 1" => "Introduction", "Chapter 2" => "Conclusion" },
"Book 2" => {
"Chapter 1" => "Intro",
"Chapter …Run Code Online (Sandbox Code Playgroud) perl6 ×10
raku ×10
perl ×2
comparison ×1
cpu-cores ×1
hash ×1
performance ×1
regex ×1
set ×1
slice ×1