标签: perl6

如何使用Perl 6从嘈杂文件的中间提取一些数据?

我想用惯用的Perl 6来做这件事.

我在一个嘈杂的输出文件中找到了一个很棒的连续数据块.

我想简单地打印出标题行,从Cluster Unique它后面的所有行开始,直到但不包括第一次出现空行.这是文件的样子:

</path/to/projects/projectname/ParameterSweep/1000.1.7.dir> was used as the working directory.
....

Cluster Unique Sequences    Reads   RPM
1   31  3539    3539
2   25  2797    2797
3   17  1679    1679
4   21  1636    1636
5   14  1568    1568
6   13  1548    1548
7   7   1439    1439

Input file: "../../filename.count.fa"
...
Run Code Online (Sandbox Code Playgroud)

这是我要解析的内容:

Cluster Unique Sequences    Reads   RPM
1   31  3539    3539
2   25  2797    2797
3   17  1679    1679
4   21  1636    1636
5   14  1568    1568
6   13 …
Run Code Online (Sandbox Code Playgroud)

parsing text perl6 flip-flop raku

2
推荐指数
1
解决办法
169
查看次数

如何使用STD.pm6语法解析Perl 6代码?

我想使用STD.pm6从Perl 6解析Perl 6代码的最小工作示例
运行这样的东西

use v6;
use STD.pm6;
my $j = slurp 'e:\src\perl6\valid-p6-script.p6';
my $o = STD::Grammar.parse($j);
say $o.perl;
Run Code Online (Sandbox Code Playgroud)

在调试器下给我绝对奇怪的输出:

e:\src\prg\perl6>c:\rakudo\bin\perl6-debug-m.bat -I. p6.p6
>>> LOADING p6.p6
>>> LOADING E:\src\prg\perl6\STD.pm6
Unhandled exception: ctxlexpad needs an MVMContext
   at gen/moar/m-CORE.setting:15136  (C:\rakudo/share/perl6/runtime/CORE.setting.moarvm::24)
 from gen/moar/m-CORE.setting:15250  (C:\rakudo/share/perl6/runtime/CORE.setting.moarvm:AT-KEY:95)
 from gen/moar/m-CORE.setting:4291  (C:\rakudo/share/perl6/runtime/CORE.setting.moarvm:postcircumfix:<{ }>:4294967295)
 from C:\rakudo/share/perl6/lib/Debugger/UI/CommandLine.pm:736  (C:\rakudo\share\perl6\lib\Debugger\UI\CommandLine.pm.mo
arvm::82)
 from gen/moar/m-CORE.setting:2826  (C:\rakudo/share/perl6/runtime/CORE.setting.moarvm:sink-all:168)
 from gen/moar/m-CORE.setting:10187  (C:\rakudo/share/perl6/runtime/CORE.setting.moarvm:sink:36)
 from C:\rakudo/share/perl6/lib/Debugger/UI/CommandLine.pm:730  (C:\rakudo\share\perl6\lib\Debugger\UI\CommandLine.pm.mo
arvm:unhandled:114)
 from C:\rakudo/share/perl6/lib/Debugger/UI/CommandLine.pm:721  (C:\rakudo\share\perl6\lib\Debugger\UI\CommandLine.pm.mo
arvm::25)
 from gen/moar/m-Metamodel.nqp:3586  (C:\rakudo\share\nqp\lib/Perl6/Metamodel.moarvm:enter:28)
 from gen/moar/m-CORE.setting:5190  (C:\rakudo/share/perl6/runtime/CORE.setting.moarvm:CALL-ME:57)
 from gen/moar/m-BOOTSTRAP.nqp:2749  (C:\rakudo/share/nqp/lib/Perl6/BOOTSTRAP.moarvm::93)
 from gen\moar\stage2\NQPHLL.nqp:1425  (C:\rakudo\share\nqp\lib/NQPHLL.moarvm:command_eval:380)
 from src/Perl6/Compiler.nqp:59  (C:\rakudo\share\nqp\lib/Perl6/Compiler.moarvm:command_eval:93)
 from gen\moar\stage2\NQPHLL.nqp:1365 …
Run Code Online (Sandbox Code Playgroud)

parsing perl6

2
推荐指数
1
解决办法
152
查看次数

如何在Perl 6中为我的自定义类添加下标?

我是Perl 6的新手.我的Atom编辑器中有以下代码,但我仍然不明白它是如何工作的.我复制了以下代码,正如doc.perl6.org所说,但它似乎无法正常工作.所以我把代码更改为:

use v6;

class HTTPHeader { ... }

class HTTPHeader does Associative  {

    has %!fields  handles <self.AT-KEY self.EXISTS-KEY self.DELETE-KEY self.push
                          list kv keys values>;
    method Str { say self.hash.fmt; }


    multi method EXISTS-KEY ($key)       { %!fields{normalize-key $key}:exists }
    multi method DELETE-KEY ($key)       { %!fields{normalize-key $key}:delete }
    multi method push (*@_)              { %!fields.push: @_                   }

    sub normalize-key ($key) { $key.subst(/\w+/, *.tc, :g) } 

    method AT-KEY (::?CLASS:D: $key) is rw {
        my $element := %!fields{normalize-key $key};

        Proxy.new(
            FETCH => …
Run Code Online (Sandbox Code Playgroud)

perl6 raku

2
推荐指数
1
解决办法
210
查看次数

我如何使用Set或Setty存储唯一的数组?

我有兴趣使用Set如下持有数组:

my @v1 = 1, 2, 3;
my @v2 = 1, 2, 3;

my $set Set.new(@v1, @v2);
Run Code Online (Sandbox Code Playgroud)

Set容易认识到两个数组是相同的,就像~~运算符所观察到的那样,但是Set使用===运算符来比较大多数对象.

# desired outcome: set([1 2 3])
# actual outcome: set([1 2 3], [1 2 3])
Run Code Online (Sandbox Code Playgroud)

可以在将数组添加到数组之前对其进行序列化Set,使用精彩的Set魔法,然后反序列化.这看起来很尴尬.

可以做一个Setty使用类~~的比较.这似乎是一个很好的学习,但也许是错误的.

有没有更惯用的方法呢?

perl6

2
推荐指数
1
解决办法
105
查看次数

使用整数作为哈希键是否安全?

使用整数作为哈希键是否安全?

my %hash;
my $str = ...

for $str.NFC {
    %hash{$_} = ...
}
Run Code Online (Sandbox Code Playgroud)

integer key hashmap perl6

2
推荐指数
1
解决办法
880
查看次数

如何将项目上下文数组分配给位置?

在Rakudo Perl 6中item$可用于评估项目上下文中的表达式.请参阅https://docs.perl6.org/routine/item

我正在使用一个返回项目contextualized Array的库.删除语境化的正确方法是什么,以便将其分配给@变量?

例如:

my @a = $[<a b c>];
dd @a; # Outputs: Array @a = [["a", "b", "c"],]
Run Code Online (Sandbox Code Playgroud)

rakudo perl6

2
推荐指数
1
解决办法
93
查看次数

perl6将运算符作为参数传递

我试图通过定义和传递原始运算符来实现类似于Scheme的一些功能.在Scheme中,你可以

(define x +) (x 1 2)
Run Code Online (Sandbox Code Playgroud)

并且此操作将给出答案3.在perl6中,我不得不将操作符放在另一个函数中以实现相同的操作:

sub x($a) { $a * 2; }
sub y($m, $n) { $m($n); }
say y(&x, 3); # gives you 6
say y(+, 3) # this is error
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法来传递运算符和函数?

谢谢.

parameters arguments operators perl6

2
推荐指数
1
解决办法
128
查看次数

<.before ...>是什么意思?

在Perl 6中,<.before ... >正则表达式的含义是什么?它似乎意味着<?before ... >:

my $str = "Hello";
$str ~~ /<alpha> <?before 'o'>/;
say $/;
$str ~~ /<alpha> <.before 'o'>/;
say $/;
Run Code Online (Sandbox Code Playgroud)

输出:

?l?
 alpha => ?l?
?l?
 alpha => ?l?
Run Code Online (Sandbox Code Playgroud)

我想澄清一下,因为我看到了一些使用的代码,<.before ...>我不确定它是什么意思.它可能是非法的语法,或者它可能意味着负面的前瞻<!before ...>或积极的前瞻<?before ...>或其他.我知道我可以<alpha>通过在它前面放一个点来制定像非捕获这样的规则<.alpha>,但是对于我来说,因为它们总是无法捕获而对前瞻没有意义.在任何情况下,它应该写<.?before ... ><.!before ... >区分正面和负面的前瞻?

perl6 raku

2
推荐指数
1
解决办法
150
查看次数

Perl6,如何删除字符串中的最后一个字符?

在Perl6中,如何从字符串中删除最后一个字符?

perl6

2
推荐指数
1
解决办法
250
查看次数

从类外部更改类变量

最后,当我设法理解如何解决这个问题,即如何更改内部动态变量的值时,代码已经移动,现在它以这种方式声明:

my int $is-win = Rakudo::Internals.IS-WIN;
Run Code Online (Sandbox Code Playgroud)

这是在里面声明的类变量class Encoding::Builtin.因为操作系统不是在变量的生命周期中发生变化的东西,所以在世界上具有全部意义.但是,我需要从其他操作系统测试此代码,因此我需要访问该类变量并为其赋值True.我可以使用元对象协议吗?

perl6 meta-object-protocol

2
推荐指数
1
解决办法
136
查看次数