小编rai*_*iph的帖子

在Perl6中向数组附加多个值

我正在寻找一种方法将多个值附加到@array.该文档指出,有一个名为.append的方法可以完成这项工作.但是当我做这样的事情时:

my @array = <a b>;
my @values = 1,2,3;
@array.append: @values, 17;
Run Code Online (Sandbox Code Playgroud)

我得到一个嵌套的结果:

[a b [1 2 3] 17]
Run Code Online (Sandbox Code Playgroud)

arrays nested append flatten perl6

9
推荐指数
1
解决办法
183
查看次数

perl6正则表达式子规则和命名正则表达式比显式正则表达式慢很多; 如何使它们同样快速?

我有一个1608240行的数据文件.该文件是分段的.每个部分在开始行中都有一个唯一的单词,所有部分在该部分的最后一行中都有相同的单词"doneSection".

我试图通过执行以下操作来删除某些部分(由原始帖子中的@raiph重新格式化代码,以使代码更易于解释):

# using named subrules/regex is EXTREMELY slow;
# it reads about 2 lines per second, and grinds to halt
# after about 500 lines: (>> is the right word boundary)
perl6 -e 'my regex a { [ <{<iron copper carbon>.join("||")}> ] };
          my $x = 0;
          for "/tmp/DataRaw".IO.lines {
            $*ERR.print( "$x 1608240 \r" );
            ++$x;
            .say if m/:i beginSection \s+ <a> >>/ or
                    (m/:i \s+ <a> \s+ /
                     ff
                     m/:i doneSection/);
          }'

# however, if I …
Run Code Online (Sandbox Code Playgroud)

regex performance perl6

9
推荐指数
1
解决办法
218
查看次数

-I和有什么不一样。和-Ilib在Perl6中?

我的本地分布如下:

.
??? META6.json
??? lib
    ??? Foo.pm6
Run Code Online (Sandbox Code Playgroud)

双方perl6 -I. -e 'use Foo;'perl6 -Ilib -e 'use Foo;'编译和运行,所以哪一个我应该使用,为什么?

software-distribution metadata perl6 module-search-path

9
推荐指数
1
解决办法
119
查看次数

是否可以将 CompUnit 模块用于收集的数据?

我开发了一个用于处理文档集合的模块

该软件的一次运行会收集有关它们的信息。数据存储在称为%processed和 的两个结构中%symbols。需要缓存数据以供后续在同一组文档上运行软件,其中一些文档可能会发生变化。(文档本身是使用CompUnit 模块缓存的)。

目前数据结构的存储/恢复如下:

# storing
'processed.raku`.IO.spurt: %processed.raku;
'symbols.raku`.IO.spurt: %symbol.raku;

# restoring
my %processed = EVALFILE 'processed.raku';
my %symbols = EVALFILE 'symbols.raku';
Run Code Online (Sandbox Code Playgroud)

将这些结构输出到可能非常大的文件中可能会很慢,因为散列被解析以创建字符串化形式,并且因为它们正在重新编译而在输入时很慢。

它不用于检查缓存文件,仅用于保存软件运行之间的状态。

此外,虽然这对我的用例来说不是问题,但这种技术不能在一般情况下使用,因为字符串化(序列化)不适用于 Raku 闭包 - 据我所知。

我想知道是否可以使用 CompUnit 模块,因为它们用于存储模块的编译版本。那么也许,它们可以用来存储数据结构的“编译”或“内部”版本?

有没有办法做到这一点?

如果没有,是否有任何技术原因可能无法实现?

performance caching raku

9
推荐指数
1
解决办法
113
查看次数

简洁的方法将抛出异常改为失败?

是否有更简洁的方法将抛出的异常提升为失败而不是以下?

try {
    die 'always';
    CATCH { default { fail $_ } }
}
Run Code Online (Sandbox Code Playgroud)

error-handling exception-handling try-catch rakudo perl6

8
推荐指数
3
解决办法
149
查看次数

如何在Perl 6中制作对象的单独副本?

我不完全理解文档,所以我尝试过clone,似乎有一个可变类的属性,它可以在旧对象中使用旧对象进行更改(这就是我不想要的) .如何使它们(即副本和原件)完全分开?

class A {
  has @.a;
}

my A $x = A.new;
my A $y = A.new;

$x.a = 1, 2;

$y = $x.clone;

$x.a.push(4);
say $y.a; # [1 2 4]
Run Code Online (Sandbox Code Playgroud)

clone deep-copy shallow-copy perl6

8
推荐指数
1
解决办法
146
查看次数

使用Proc :: Async从绑定管道读取

Proc::Async是Perl 6用于与系统异步交互的类之一.文档指定了这种绑定到外部程序输出的方式:

my $p = Proc::Async.new("ls", :out);
my $h = "ls.out".IO.open(:w);
$p.bind-stdout($h);
await $p.start;

say "Done";
Run Code Online (Sandbox Code Playgroud)

(添加了一些修改,比如等待承诺).但是,我不知道如何打印输出$p.添加tap产生此错误:

Cannot both bind stdout to a handle and also get the stdout Supply
Run Code Online (Sandbox Code Playgroud)

在bind-stdout.p6第8行的块中

文档中有print写入和写入方法,但read除了阅读文件之外,我不知道如何使用它.任何的想法?

asynchronous stdout pipe process perl6

8
推荐指数
1
解决办法
146
查看次数

Perl6如何决定加载哪个版本的模块?

当我这样做时use Foo:ver<1.0>;,将加载模块的1.0版本Foo。但是,当我这样做时会发生什么use Foo;呢?

versioning module package perl6 api-versioning

8
推荐指数
1
解决办法
143
查看次数

在 Raku 中使用时如何关闭 Perl 5 模块 Data::Printer 的 `show_tied` 选项?

我在 Perl 中使用了 CPAN Perl 模块 Data::Printer (DP)。它工作得很好。

现在我想在 Raku 代码中使用它。

当我使用该:from<Perl5>功能导入它然后使用它运行代码时,注释(tied to Perl6::Hash)会附加到哈希的显示中。1

正如DP 的 CPAN 文档所示,此注释由选项控制show_tied。我想将其关闭(设置为0)而不是默认开启(设置为1)。这是我在 Perl 中的做法:

use Data::Printer show_tied => 0;
Run Code Online (Sandbox Code Playgroud)

但是当我在 Raku 中尝试这个时:

use Data::Printer:from<Perl5> show_tied => 0;
Run Code Online (Sandbox Code Playgroud)

我得到:

从“Data::Printer”导入时出错:没有这样的标签“show_tied”

show_tied在 Raku 中使用 DP 时如何关闭?

脚注

1也许这是因为Inline::Perl5(实现该:from<Perl5>功能)正在做一些事情来实现流畅的 Perl/Raku 互操作。

tags import perl module raku

8
推荐指数
1
解决办法
115
查看次数

无法在 CLASS 中使用带有 WHERE 子句的无符号变量?

模块A有一个成员变量 name c,带有一个 WHERE 子句:

unit class A;

my \MAXVALUE = 1000_000;

has $.c where 0 < * < MAXVALUE;

method gist() {
    "$!c";
}
Run Code Online (Sandbox Code Playgroud)

设置RAKULIB环境变量:

set RAKULIB="d:\scripts\Raku\A\lib"      # Windows
export RAKULIB="/opt/scripts/Raku/A/lib" # Linux
Run Code Online (Sandbox Code Playgroud)

像这样使用模块A:

use A;

my $a = A.new(c => 1);
say $a;
Run Code Online (Sandbox Code Playgroud)

但得到类型检查错误:

Type check failed in binding to parameter '<anon>'; expected Any but got Mu (Mu)
  in whatevercode  at D:\scripts\Raku\Raku\A\lib\.precomp\C6EB86CB837D3BCAAA3D85B66CE337C820700C08\6D\6DCD4CE23D88E2EE9568BA546C007C63D9131C1B line 1
  in block <unit> at basic.rakutest line 3
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?

乐库版本: …

predicate where-clause raku

8
推荐指数
1
解决办法
108
查看次数