我正在尝试重新执行我的程序以匹配所有,匹配任何匹配项目中的项目.关于Perl6的一些文档没有解释当前实现的行为(Rakudo 2018.04),我还有一些问题.
(1)关于正则表达式的文档说,将数组插入匹配正则表达式意味着"最长匹配"; 但是,这段代码似乎没有这样做:
> my $a="123 ab 4567 cde";
123 ab 4567 cde
> my @b=<23 b cd 567>;
[23 b cd 567]
> say (||@b).WHAT
(Slip)
> say $a ~~ m/ @b /
?23? # <=== I expected the match to be "567" (@b[3] matching $a) which is longer than "23";
Run Code Online (Sandbox Code Playgroud)
(2)(|| @b)是Slip; 如何轻松地对数组中的所有元素进行OR或AND而不显式循环遍历数组?
> say $a ~~ m:g/ @b /
(?23? ?b? ?567? ?cd?)
> say $a ~~ m:g/ ||@b /
(?23? ?b? ?567? ?cd?)
> say …Run Code Online (Sandbox Code Playgroud) 如果连接中的所有部分匹配相同的子字符串而不是整个字符串,则Perl6正则表达式匹配连接&&返回True:
> my $a="123abc456def";
123abc456def
> so $a ~~ m/ 23 && ef /
False
Run Code Online (Sandbox Code Playgroud)
它是假的,因为"$"中的"23"匹配"$"中的"23"子字符串,但此子字符串与连接中的"ef"不匹配.这有点违反直觉,因为它更容易解释$ a ~~ m/23 && ef/as"$ a匹配23和$ a匹配ef"而不是"$ a有一个匹配23的子字符串,这个子字符串也匹配ef ".
如果我有n个正则表达式并且我想看看所有这些n个正则表达式是否匹配相同的整个字符串而不是匹配整个字符串的相同子字符串部分,那么编写perl6表达式的最佳方法是什么?
在这个例子中,我真的很想做
so (($a ~~ /23/) && ($a ~~ /ef/))
Run Code Online (Sandbox Code Playgroud)
如果正则表达式的数量很大,那么除了循环外,上面的内容更难写:
so (gather {for @myRegexes { take $a ~~ / $_ /; } }).all
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
通过替换,它更容易阅读为"$ a匹配23或$ a匹配ef"而不是"$ a匹配23或匹配ef"的部分:
> so $a ~~ m/ 23 || ef /
True
Run Code Online (Sandbox Code Playgroud)
谢谢 !
lisprog
有没有办法用s ///同时进行替换?例如,如果我有一个带有1s,2s,3s等数字的字符串,我想用"tom"代替1,用"mary"替换2,用"jane"代替3,等等?
my $a = "13231313231313231";
say $a ~~ s:g/1/tom/;
say $a ~~ s:g/2/mary/;
say $a ~~ s:g/3/jane/;
Run Code Online (Sandbox Code Playgroud)
有没有一个好方法一次完成所有3个步骤?
谢谢 !!!
lisprog
我试图从使用常规代码的用户输入中获取列表,但是由于以下错误,有时它会意外失败:
This type cannot unbox to a native integer: P6opaque, Str
Run Code Online (Sandbox Code Playgroud)
代码行是
my @a = prompt("Enter list: ").words || (1,2,3);
Run Code Online (Sandbox Code Playgroud)
仅当我仅输入一个数字时,它才会失败。
什么时候在没有用户意识的情况下将Str转换为“ P6opaque,Str”?我不能使用+ @ a [0]或@a [0] .Int将此“ P6opaque,Str”转换为Int。我在这里想念什么?
非常感谢您的帮助 !!!
赖脯
当参数包含Str和Int的混合时,哪种类型首先针对min和max例程进行转换?
To exit type 'exit' or '^D'
> say ("9", "10").max
9
> say ("9", "10").max.WHAT
(Str)
> say (9, "10").max
9
> say (9, "10").max.WHAT
(Int) # if convert to Int first, result should be 10
> say ("9", 10).max
9
> say ("9", 10).max.WHAT
(Str) # if convert to Str first, result should be 9
> say (9, "10").min
10
> say (9, "10").min.WHAT
(Str) # does min and max convert Str or Int differently?
Run Code Online (Sandbox Code Playgroud)
如果min或max将参数转换为第一个参数的类型,则此处的结果仍然不一致。
谢谢您的启发!
我需要将数千个二进制字节字符串(每个大约 1 兆字节长)转换为 ASC 字符串。这是我一直在做的,似乎太慢了:
sub fileToCorrectUTF8Str ($fileName) { # binary file
my $finalString = "";
my $fileBuf = slurp($fileName, :bin);
for @$fileBuf { $finalString = $finalString ~ $_.chr; };
return $finalString;
}
Run Code Online (Sandbox Code Playgroud)
~@b 将@b 转换为所有元素以空格分隔的字符串,但这不是我想要的。如果@b = <abcd>; ~@b 是“abc d”;但我只想要“abcd”,而且我想做得非常快。
那么,最好的方法是什么?我不能真正将 hyper 用于并行性,因为最终的字符串是按顺序构造的。或者我可以吗?
我经常遇到格式错误的 utf-8 字符会破坏我的代码。我已经阅读了有关 stackoverflow 的一些(不是全部)相关问题/答案,但没有特定于 Raku/perl6。有没有一种快速的方法可以从字符串中删除这些讨厌的字符?“ https://docs.raku.org/language/regexes#Predefined_character_classes ”中的预定义字符类不会这样做:
示例:来自 REPL:
> say "â " ~~ /\w/ # you have to have a space following the "a" with "^" for it to work
?â?
> say "?" ~~ /\w/ # without the space, the character doesn't look normal
Malformed UTF-8 at line 1 col 6
> say "â ".chars # looks like 2 chars, but it says 1 char
1
> say "â ".comb.[0] # strange, the pesky char makes the …Run Code Online (Sandbox Code Playgroud) 我有 20 个线程,它们都是从读取一个巨大的数据数组开始的。大多数情况下,代码运行顺利。然而,偶尔,如果没有可重现的模式,一两个线程会说没有数据。
我认为这可能是读取巨大数组时线程之间的竞争条件。我计划实施睡眠例程或原子锁。但是从内存块读取时不应该发生竞争条件,对吗?
我有一个巨大的哈希值,包含大约10年的每日统计数据.在Perl 6中是否有一种方法可以确定此哈希使用的实际内存(以字节为单位)(例如showMemoryUsed(%myBigHash)).即使%myBigHash是空的,由于使用的内存和散列数据类型的Perl 6实现,它也不是零字节.此信息将告诉我是否需要重新实现我的代码或定期写入文件以缓解RAM短缺(我的程序在具有2G RAM的虚拟化Linux上运行).
谢谢.
我使用 wget 从网络上读取页面。但有时我会得到 gzipped 二进制流而不是纯文本 html 文件。确定我获得的数据是二进制还是纯文本的最佳方法是什么?如果我尝试将数据与字母或数字(文本)匹配,我只会得到“格式错误的 UTF-8”。
my $result = run << wget -k -q -O $aPage "$aURL" >>, :err;
Run Code Online (Sandbox Code Playgroud)
我需要知道 $result 是二进制(gzip)还是纯文本。
if $result ~~ / <:L + :N> / { } # this will fail with "Malformed UTF-8" if $result is a binary stream
Run Code Online (Sandbox Code Playgroud)
是否有 Raku 包可以从任何 url 获取纯文本 html 页面源?