我想将字符串拆分为单词并将每个单词打印在单独的行上,因此我尝试了以下操作:
"foo bar baz".words>>.say
Run Code Online (Sandbox Code Playgroud)
然而,结果并不顺利:
baz
foo
bar
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
我正在尝试解析 BibTeX 作者字段,并将其拆分为单独的作者。这将帮助我重写每个作者的姓名首字母。这是一个最小的例子:
use v6;
my $str = '{Rockhold, Mark L and Yarwood, RR and Selker, John S}';
grammar BibTexAuthor {
token TOP {
<all-text>
}
token all-text {
'{' <authors> '}'
}
token authors {
[<author> [' and ' || <?before '}'>]]+
}
token author {
[<-[\s}]> || [' ' <!before 'and '>]]+
}
}
class BibTexAuthor-actions {
method TOP($/) {
say $/;
print "First author = ";
say $<author>.made[0];
make $/.Str;
}
method all-text($/) {
make $/.Str;
} …Run Code Online (Sandbox Code Playgroud) 我发现这个非常有用的单行,它可以工作,但我无法理解它是如何设法在文件行中循环两次。
perl6 -ne 'state %l; .say if ++%l{$_} == 1' input-file.txt
Run Code Online (Sandbox Code Playgroud) 我已经学习 perl6/raku 一段时间了,我真的很喜欢这个dir例程https://docs.perl6.org/routine/dir。它非常方便且易于使用。
有什么方法可以导入/反向移植dir到 Perl 中吗?我无法通过互联网搜索获得任何结果。
我正在尝试在签名中使用类型强制。
如何修复该my Chars(Str) @a := 'hello';行以使此代码正常工作?
class Chars is Array {
submethod new(Str:D $s) {
nextwith(|$s.comb);
}
}
use MONKEY-TYPING;
augment class Str {
method Chars { Chars.new(self) }
}
say Chars.new("hello").raku;
say "hello".Chars.raku;
my Chars(Str) @a := 'hello';
@a.raku.say;
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个测试方法来打印以度数给定的角度的余弦值。
我最终想要的是能够解决以下问题
say 45.AngleCosine;
Run Code Online (Sandbox Code Playgroud)
没有 .new 的东西,比如
say .7.cos;
Run Code Online (Sandbox Code Playgroud)
我如何放弃 .new 的东西?
这是我到目前为止:
class Angle {
has Numeric $.degrees;
method AngleCosine( $debug = False ) {
my Str $SubName = &?ROUTINE.name;
my Numeric $radians = self.degrees * ? / 180;
my Numeric $cosine = $radians.cos;
if $debug {
print "$SubName debugging:\n";
print " self = <" ~ self.degrees ~ ">\n";
print " radians = <$radians>\n";
print " Cosine of " ~ self.degrees ~ " degrees is <" ~ $cosine ~ …Run Code Online (Sandbox Code Playgroud) 我是一名学生,目前正在撰写有关 Raku 的论文,为此我决定评估 Raku (Perl 6) 在处理高并发时是否是一种好语言。
除了官网,我还没有找到任何关于 Raku 并发的论文。另外,我不知道如何评估 Raku 的并发性(例如,我应该使用什么程序,应该将哪种语言与 Raku 进行比较等等)。
Raku 提供了哪些并发机制?这些记录在哪里?如何评估它们的功能和性能?
得到这个简单的循环:
use Config::Simple:from<Perl5>;
my $cfg = Config::Simple.new(syntax => 'ini');
%config{'short_name'} = 'blah';
for %config.kv -> $k, $v {
$cfg.param("%config{'short_name'}.$k", $v);
}
Run Code Online (Sandbox Code Playgroud)
工作正常。但我想更熟悉实现相同目标的其他方法,即使只是为了轻松地阅读其他人的代码。另外,循环似乎是“旧”学校的做事方式,而不是很“像 Raku”,我需要更舒适地以更高级的方式使用函数。
不管怎样,为了伸展我的新 Raku 肌肉,我想出了这句话作为替代方案:
map(-> $k, $v { $cfg.param("%config{'short_name'}.$k", $v) }, %config.kv);
Run Code Online (Sandbox Code Playgroud)
它的可读性较差(至少对于我未经训练的眼睛来说),但它有效。
我的预感是有一些好方法可以使这段代码更加简洁和可读。有兴趣看看我是否是对的。
我有这个类的子类Str:
use Vimwiki::File::TextProcessingClasses;
unit class Vimwiki::File::ContentStr is Str;
method new(Str:D $string) {
self.Str::new(value => $string);
}
# this method fails
method capitalize-headers() {
self = Vimwiki::File::TextProcessingClasses::HeadlineCapitalizer.new.capitalize-headers(self);
}
Run Code Online (Sandbox Code Playgroud)
问题是该capitalize-headers方法因错误而失败,Cannot modify an immutable因为它是一个字符串。我可以避免这个问题的一种方法是简单地不子类化Str并为Str我想要使用的方法编写包装器,如下所示:
unit class Vimwiki::File::ContentStr;
has Str $!content;
method uc() {
$!content = $!content.uc;
}
Run Code Online (Sandbox Code Playgroud)
但这让我想知道,Raku 中是否可能有类似 AUTOLOAD 之类的东西,而不是编写这些包装方法,这样如果方法不存在,则可以默认在属性上调用不存在的方法$!content。
这可能吗?或者是否有更干净的方法来解决不可变对象问题?
我想不出其他方式来运行输出二进制文件的命令行,所以我不得不这样做。
让我们向 git 存储库添加一个二进制文件
mkdir test
cd test
git init .
wget https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Camelia.svg/320px-Camelia.svg.png
git add 320px-Camelia.svg.png
git commit -am "Added Camelia"
Run Code Online (Sandbox Code Playgroud)
获取输出的提交哈希,我们将其用作<grabbed hash>如下方式使用它。
现在,运行这个:
say (run "git", "show", "<grabbed hash>:Camelia.svg.png", :out).out
Run Code Online (Sandbox Code Playgroud)
这将返回一条Malformed UTF-8消息。公平地说,它不是二进制的。但是,我尝试用 捕获该异常,try但没有办法。我尝试将运行与 分开out,但仍然遇到无法捕获的异常。任何想法?