标签: perl6

Perl 6是否与Python的dir()相当?

我正试图在Perl 6中感到舒服.当我在REPL提示符下时,我在Python中发现的一件事就是我可以做一个dir(对象)并找出一个对象的属性,在Python中包含对象的方法.

这通常有助于提醒我想做什么; "哦,这是正确的,Python中的修剪被称为条带",就像那样.

在Perl 6中,我知道内省方法.WHO,.WHAT,.WHICH,.HOW和.WHY,但这些是在类或对象级别.我如何找出对象内部的内容,以及我可以对它做些什么?

introspection perl6 raku

16
推荐指数
1
解决办法
285
查看次数

有什么区别:D和:D:?

我正在浏览例程中Perl 6文档shift并看到了这个片段:

定义为:

multi sub    shift(Array:D )
multi method shift(Array:D:)
Run Code Online (Sandbox Code Playgroud)

我知道:D指的Array就是definedAnyNil,但有什么:D:?搜索起来非常困难.

类型签名文档的这一部分包含更多语法示例,但没有(据我所知)解释它.

perl6 raku

15
推荐指数
2
解决办法
344
查看次数

如何确定Perl 6数组中是否存在元素

我以为在互联网上的某个地方会有一个简单的答案,但似乎我找不到解决方案.我首先想知道是否有一个简单的方法或功能:

例如,~~array.contains()来自Perl 5

在Perl 6中有多少不同的方法可以实现这一结果也很好,因为考虑到问题的情况,有些方法可能比其他方法更好.

arrays containers list perl6 raku

15
推荐指数
3
解决办法
993
查看次数

[]在Perl 6中使用匿名函数减少

我们可以使用reduce带有sub两个参数,将它放在双括号中:

> sub mysum { $^a + $^b }
> [[&mysum]] 1,3,5
9
Run Code Online (Sandbox Code Playgroud)

但是如果我们想要使用匿名函数呢?

以下两个变体都会产生编译错误:

> [[&{ $^a + $^b }]] 1,3,5
> [[{ $^a + $^b }]] 1,3,5
Run Code Online (Sandbox Code Playgroud)

syntax functional-programming perl6

15
推荐指数
2
解决办法
178
查看次数

Perl6:处理非常大的文件的最佳方法是什么?

上周我决定尝试Perl6并开始重新实现我的一个程序.我不得不说,Perl6对于对象编程来说非常简单,这在Perl5中对我来说非常痛苦.

我的程序必须读取和存储大文件,例如全基因组(高达3 Gb或更高,参见下面的示例1)或制表数据.

代码的第一个版本是通过逐行迭代("genome.fa".IO.lines)以Perl5方式制作的.对于正确的执行时间来说,它非常缓慢且无法确定.

my class fasta {
  has Str $.file is required;
  has %!seq;

  submethod TWEAK() {
    my $id;
    my $s;

    for $!file.IO.lines -> $line {
      if $line ~~ /^\>/ {
        say $id;
        if $id.defined {
          %!seq{$id} = sequence.new(id => $id, seq => $s);
        }
        my $l = $line;
        $l ~~ s:g/^\>//;
        $id = $l;
        $s = "";
      }
      else {
        $s ~= $line;
      }
    }
    %!seq{$id} = sequence.new(id => $id, seq => $s);
  }
}


sub MAIN()
{ …
Run Code Online (Sandbox Code Playgroud)

performance grammar parsing perl6 fasta

15
推荐指数
1
解决办法
481
查看次数

如何使用常量值作为哈希键

是否有一种简单的方法可以将定义常量的值用作Perl6中的散列/对键?

例如 :

constant KEY = "a string";
my %h = ( KEY => "a value" );
Run Code Online (Sandbox Code Playgroud)

这将创建"KEY"而不是"字符串"的键.

我可以 :

my %h = ( "{KEY}" => "a value" );
Run Code Online (Sandbox Code Playgroud)

但这似乎有点笨重.我想知道是否有更好的方法?

perl6 raku

15
推荐指数
1
解决办法
178
查看次数

Perl6搜索然后替换为子例程的输出

我已经整理了文档,但似乎找不到在perl6中执行此操作的方法。

在perl5中,我会做的(只是一个例子):

sub func { ... }

$str =~ s/needle/func($1)/e;
Run Code Online (Sandbox Code Playgroud)

即用对“ func”的调用输出替换“ needle”

regex evaluation replace string-substitution perl6

15
推荐指数
2
解决办法
199
查看次数

无法重载我的课程的逻辑运算符(或)

我试图重载or自定义类的逻辑运算符,但它似乎不起作用。这是我的工作:

class A { has $.a }
multi sub infix:<or> (A $a, A $b) {
    "works!({$a.a}, {$b.a})"
}
say A.new(:1a) or A.new(:2a); 
Run Code Online (Sandbox Code Playgroud)

我期望将其works!(1, 2)作为输出获取,但我会获取A.new(a => 1),这是标准or运算符的结果。

其他运算符(and和除外xor)似乎对我有用:

class A { has $.a }
multi sub infix:<anything-else> (A $a, A $b) {
    "works!({$a.a}, {$b.a})"
}
say A.new(:1a) anything-else A.new(:2a); 
Run Code Online (Sandbox Code Playgroud)

结果works!(1, 2)

我是不是做错了什么或有只是没有办法超载的标准orandxor运营商?

operator-overloading perl6

15
推荐指数
1
解决办法
123
查看次数

如何在Perl 6中包含文件

我有两个Perl 6文件:

hello.p6:

sub hello
{
    say 'hello';
}
Run Code Online (Sandbox Code Playgroud)

和main.p6:

require 'hello.p6';

hello();
Run Code Online (Sandbox Code Playgroud)

但是不要工作.如何在主脚本中包含第一个文件?

perl-module perl6 raku

14
推荐指数
2
解决办法
1055
查看次数

Perl6:比较运算符~~

我不明白这种行为:

> sort([1,2,3,4]) ~~ sort([1,2,3,4])
False
Run Code Online (Sandbox Code Playgroud)

你能解释一下吗?根据Perl 6,为什么这两个列表(显然相等)不相等.

更新

有趣,但它取决于Perl6版本(我刚刚注意到它):

$ which perl6
/usr/bin/perl6
$ dpkg -S `which perl6`
rakudo: /usr/bin/perl6
$ perl6 --version
This is perl6 version 2015.11 built on MoarVM version 2015.11
$ perl6
> sort([1,2,3]) ~~ sort([1,2,3])
True
> 
$ export PATH=~/.rakudobrew/bin:$PATH
$ perl6 --version
This is Rakudo version 2017.12 built on MoarVM version 2017.12.1
implementing Perl 6.c.
$ perl6
To exit type 'exit' or '^D'
> sort([1,2,3]) ~~ sort([1,2,3])
False
> 
Run Code Online (Sandbox Code Playgroud)

从#perl6的讨论开始:

[19:35] <+committable6> AlexDaniel, 
¦2015.12,2016.01.1,2016.02,2016.03,2016.04,2016.05,2016.06,2016.07.1,2016.08.1,2016.09,2016.10,2016.11,2016.12: …
Run Code Online (Sandbox Code Playgroud)

operators perl6 raku

14
推荐指数
2
解决办法
394
查看次数