小编Pat*_*Pat的帖子

为什么在perl6中的正则表达式捕获周围会出现unicode引号?

我正在使用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,并且彻底迷茫.

regex perl6 raku

11
推荐指数
1
解决办法
194
查看次数

Perl 6的DEFINITE与定义的方法有什么区别?

类型对象总是未定义的,但我已经看到了一些使用的测试.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)

perl6 raku

11
推荐指数
1
解决办法
161
查看次数

元素成员在Perl 6中是如何工作的?

考虑这个例子

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)

set perl6 raku

11
推荐指数
1
解决办法
117
查看次数

列表重复(xx)没有评估?

列表重复运算符(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)

是否有一个前缀或某些东西可以让我在一个声明中做到这一点?

perl6 raku

11
推荐指数
2
解决办法
180
查看次数

Perl6子MAIN /命令行解析

在Perl 5中,我可以像这个问题一样多次设置一个选项:

Perl Getopt多次使用相同选项

我想知道是否可以使用Perl 6和MAIN sub做同样的事情?

perl6 raku

11
推荐指数
1
解决办法
161
查看次数

比较2个数据集可能与并发/异步/并行方法

我目前正在尝试改进现有的机制(比较来自2个源的数据,在perl5中实现),并且想要使用perl6.

在未压缩的平面文件中,我的目标数据量范围约为20-30 GB.就行而言,文件可以包含1800万到2800万行.它每行大约有40-50列.

我每天都会进行这种类型的数据协调,从文件中读取并填充哈希值大约需要10分钟.花了大约20分钟来读取这两个文件并填充哈希值.

比较过程大约需要30-50分钟,包括迭代哈希,收集所需的结果,以及写入输出文件(csv,psv).

总而言之,在具有256GB RAM(包括间歇性服务器负载)的32核双xeon cpu服务器上执行此过程可能需要30分钟到60分钟之间的任何时间.

现在我想进一步降低总处理时间.

这是我目前使用perl5的单线程方法.

  1. 从2个源(比如s1和s2)中逐个获取数据,并根据键值对填充哈希值.数据源可以是平坦的csv或psv文件,也可以是数据库查询Array of Array结果,通过DBI客户端.数据始终未分类.
  2. 具体来说,我逐行读取文件,拆分字段,并为键,值对选择所需的索引并插入哈希.
  3. 在收集数据并用所需的键/值对填充哈希之后,我开始比较并收集结果(主要比较s2和s1中缺少或不同的内容,反之亦然).
  4. 在excel文件中转储输出(如果没有大约100万或更大的行,则非常昂贵)或简单的CSV(廉价操作.首选方法).

我想知道我是否可以以某种方式并行执行第一步,即同时从两个源收集数据并填充我的全局哈希,然后继续比较和转储输出?

perl6可以提供哪些选项来处理这种情况?我已经阅读了有关使用perl6的并发,异步和并行操作,但我不确定哪一个可以帮助我.

我非常感谢有关此事的任何一般性指导.我希望我能很好地解释我的问题,但遗憾的是我没有太多东西可以证明我到现在为止做了什么?原因是我刚刚开始解决这个问题.我只是无法看到过去的单线程方法,需要一些帮助.

谢谢.

编辑

由于我现有的问题陈述被社区视为"过于宽泛" - 请允许我尝试突出以下的难点:

  1. 如果可能的话,我想利用所有32个内核进行文件比较.我只是无法提出策略或初步想法.
  2. 为了解决这个问题或问题类型,perl6可以使用或适用哪种新技术.
  3. 如果我产生2个进程来读取文件并收集数据 - 是否可以将结果作为数组或哈希返回?
  4. 是否可以并行比较数据(存储在哈希中)?

我目前的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)

comparison performance cpu-cores perl6 raku

11
推荐指数
1
解决办法
257
查看次数

如何制作一个范围与...,但倒计时

我希望有一个从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 raku

11
推荐指数
1
解决办法
173
查看次数

数组切片中的多个组件 - 相当于perl5:@a [0..1,3]

非常基本的问题,但我似乎无法找到有关文档中多个范围的任何内容.

如何从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)?

slice perl6 raku

11
推荐指数
2
解决办法
120
查看次数

学习Perl - 哪个版本?

我一直在考虑学习Perl.我应该学习Perl5还是从Perl6开始?

perl perl6 raku

10
推荐指数
4
解决办法
837
查看次数

如何在Perl6中查看哈希的内容(以类似于Perl 5模块Data :: Dump或Data :: Show的方式)?

在Perl 5,如果我想看到的哈希的内容,我可以使用Data::Show,Data::DumpData::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)

perl hash perl6 raku

10
推荐指数
1
解决办法
317
查看次数

标签 统计

perl6 ×10

raku ×10

perl ×2

comparison ×1

cpu-cores ×1

hash ×1

performance ×1

regex ×1

set ×1

slice ×1