小编Eli*_*sen的帖子

Perl regex与Raku regex,引擎的差异?

我正在尝试将针对背包问题的基于正则表达式的解决方案从Perl转换为raku。Perlmonks的详细资料

Perl解决方案创建此正则表达式:

(?<P>(?:vvvvvvvvvv)?)
(?<B>(?:vv)?)
(?<Y>(?:vvvv)?)
(?<G>(?:vv)?)
(?<R>(?:v)?)
0
(?=
(?(?{ $1 })wwww|)
(?(?{ $2 })w|)
(?(?{ $3 })wwwwwwwwwwww|)
(?(?{ $4 })ww|)
(?(?{ $5 })w|)
)
Run Code Online (Sandbox Code Playgroud)

与匹配vvvvvvvvvvvvvvvvvvv0wwwwwwwwwwwwwww。之后,匹配哈希%+包含要放入麻袋中的物品。

我的raku转换是:

$<B> = [ [ vv ]? ]
$<P> = [ [ vvvvvvvvvv ]? ]
$<R> = [ [ v ]? ]
$<Y> = [ [ vvvv ]? ]
$<G> = [ [ vv ]? ]
0
<?before
[ { say "B"; say $/<B>; say $0; say …
Run Code Online (Sandbox Code Playgroud)

regex raku

6
推荐指数
1
解决办法
78
查看次数

如何比较乐朗中的集合?

如何操作包含结构化数据的两个集合。

例如

set(set(<a b c>), set(<d e f>)) ? set(set(<a b c>), set(<d e f>), set(<g h i>))#True
set(set(<a b c>), set(<d e f>)) eq set(set(<a b c>), set(<d e f>), set(<g h i>))#false
set(set(<a b c>), set(<d e f>)) ? set(set(<a b c>), set(<d e f>), set(<g h i>))#set(<a b c>), set(<d e f>))
Run Code Online (Sandbox Code Playgroud)

set raku

6
推荐指数
1
解决办法
88
查看次数

MixHash 很有用 - 但需要一些说明

这是对Baggy add (+) work on MixHash weights的(有点迟到的)跟进吗?. MixHash 是一个很好的单位比较工具 - 因为我知道我的 dmix => ("m"=>2,"kg"=>1,"s"=>-2).MixHash 对于 'kg m2 per s2' 和 'kg.m^2/s^2' 等等。

这是我寻求的三重清晰度:

  1. 我仍然需要将 MixHash (+) MixHash 的结果强制转换为 MixHash(默认结果是不可变的 Mix) - 一个或多个 MixHashen 的操作结果是否仍然意图成为 MixHash?
  2. 结果如果 MixHash (+) Any 潜入一个顽皮的不需要的元素 dmix => ("m"=>2,"kg"=>1,"s"=>-2,"MixHash"=>1) - 这是一个错误,对。[我已经通过将通货紧缩默认设置为空集来修补...... MixHash $.dmix is rw = ?.MixHash;]
  3. 文档https://docs.raku.org/language/setbagmix将 (+) 显示为 Baggy 添加,但 (-) 显示为 Set Difference。当我做 MixHash (-) MixHash 我似乎得到了宽松的减法 - 这就是我想要的。希望这是文档中的疏忽?

让我知道我是否可以提供代码或应该提交错误报告...

units-of-measurement raku

6
推荐指数
1
解决办法
63
查看次数

如何像 Raku 一样在 Perl 中运行 shell 命令?

我在 Raku 中有出色的代码:

#!/usr/bin/env perl6
CONTROL {
    when CX::Warn {
        note $_;
        die
    }
}
use fatal;
role KeyRequired {
    method AT-KEY (\key) {
        die "Key {key} not found" unless self.EXISTS-KEY(key);
        nextsame
    }
}

sub execute ($cmd) {
    put $cmd;
    my $proc = shell $cmd, :err, :out;
    if $proc.exitcode != 0 {
        put 'exit code = ' ~ $proc.exitcode;
        put 'stderr ' ~ $proc.err.slurp;
       put 'stdout ' ~ $proc.out.slurp;
        die
    }
}

execute "ls *.p6"
Run Code Online (Sandbox Code Playgroud)

我说“优秀”是因为 Raku 版本运行命令,返回退出代码,并在需要时打印 stdout/stderr,并且所有这些都以易于阅读和易于理解的方式进行。

通读 …

perl raku

6
推荐指数
1
解决办法
372
查看次数

我在哪里可以找到 Raku 核心转储文件?

我从 /path/to/data 运行 /home/foo/bar.p6 并显示“分段错误(核心转储)”

我在 /var/crash 或我的主目录或当前工作目录中找不到核心转储文件。

我认为是 Raku 本身进行了核心倾销。

如果我的程序导致转储,raku 会将核心转储文件放在哪里,如果 Raku 本身进行了核心转储,我会在哪里找到转储文件?

谢谢。

coredump raku

6
推荐指数
1
解决办法
73
查看次数

平滑运算符:在写入文件时重命名文件

在 Linux(可能也在 Windows/OSX)中,如果我们打开一个文件进行写入并在写入时重命名它,raku 进程会顺利进行并继续写入文件。

但是我们如何在重命名发生时找到文件的新名称(路径)?

IO::Notification不是要走的路,因为它不提供其他信息,而只提供一般描述:

FileRenamed or FileChanged
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

io file inotify rakudo raku

6
推荐指数
1
解决办法
86
查看次数

什么算作 Raku *源* 文件的换行符?

我有点惊讶地发现下面的代码

\n
# comment \xe2\x80\xa9say 1;\n# comment \xe2\x80\xa8say 2;\n# comment say 3;\n# comment say 4;\n
Run Code Online (Sandbox Code Playgroud)\n

打印1234

\n

以下是“#comment”后的相关字符:

\n
say "\xe2\x80\xa9\xe2\x80\xa8".uninames.raku;\n# OUTPUT: \xc2\xab("PARAGRAPH SEPARATOR", "LINE SEPARATOR", "<control-000B>", "<control-000C>").Seq\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n

请注意,许多/所有这些字符在大多数字体中都是不可见的。至少对于我的编辑器来说,没有一个会导致以下文本打印在新行上。至少有一个(<control-000C>,又名Form Feed,有时打印为^L)在 Vim/Emacs 中相当广泛地用作节分隔符。

\n

这提出了几个问题:

\n
    \n
  1. 这是故意的还是错误?
  2. \n
  3. 如果是故意的,那么用例是什么(除了赢得混淆代码竞赛!)
  4. \n
  5. 是只有这4个角色,还是还有其他角色?(我发现这些是因为它们共享强制中断Unicode 属性。该属性(或其他一些 Unicode 属性?)是否控制 Raku 认为的换行符?)
  6. \n
  7. 只是,真的,哇。
  8. \n
\n

(我意识到#4 在技术上不是一个问题,但我觉得有必要说一下)。

\n

unicode comments newline rakudo raku

6
推荐指数
1
解决办法
124
查看次数

为什么在使用粗箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?

Raku 是渐进式打字语言。所以下面的代码:

my %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
Run Code Online (Sandbox Code Playgroud)

是相同的:

my Hash %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
Run Code Online (Sandbox Code Playgroud)

但是,它报告一个错误:

Type check failed in assignment to %hash; expected Hash but got Rat (4.5)
Run Code Online (Sandbox Code Playgroud)

为什么在使用粗箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?

hash raku

6
推荐指数
1
解决办法
90
查看次数

perl6/rakudo:perl6默认启用"autoflush"吗?

#!perl6
use v6;

my $message = "\nHello!\n\nSleep\nTest\n\n";

my @a = $message.split( '' );

for @a {
    sleep 0.3; 
    .print;
}
Run Code Online (Sandbox Code Playgroud)

Perl6默认启用"autoflush".使用perl5而不启用"outflush"我不会得到这种行为.

stdout perl6 rakudo-star autoflush raku

5
推荐指数
1
解决办法
227
查看次数

使用Perl6处理大型文本文件太慢。(2014-09)

https://github.com/yeahnoob/perl6-perf中的代码托管,如下所示:

use v6;

my $file=open "wordpairs.txt", :r;

my %dict;
my $line;

repeat {
    $line=$file.get;
    my ($p1,$p2)=$line.split(' ');
    if ?%dict{$p1} {
        %dict{$p1} = "{%dict{$p1}} {$p2}".words;
    } else {
        %dict{$p1} = $p2;
    }
} while !$file.eof;
Run Code Online (Sandbox Code Playgroud)

当“ wordpairs.txt”较小时,运行良好。

但是,当“ wordpairs.txt”文件约为140,000行(每行,两个单词)时,它运行的非常慢。即使运行20秒,它也无法完成。

有什么问题吗?代码中是否有错误?感谢任何人的帮助!

以下内容已添加@ 2014-09-04,感谢SE Answers和IRC @ freenode#perl6的许多建议

代码(目前为2014-09-04):

my %dict;
grammar WordPairs {
token word-pair { (\S*) ' ' (\S*) "\n" }
token TOP { <word-pair>* }
}
class WordPairsActions {
method word-pair($/) { %dict{$0}.push($1) }
}
my $match = WordPairs.parse(slurp, :actions(WordPairsActions)); …
Run Code Online (Sandbox Code Playgroud)

text large-files perl6 raku

5
推荐指数
1
解决办法
427
查看次数