一些简单的Inline :: Perl5代码返回一个列表,但是它似乎返回的是项目数而不是实际的列表。
更改涉及的项目数将更改计数。
use Inline::Perl5;
my $p5 = Inline::Perl5.new;
my $perl5_code = q:to/END/;
sub p5_data {
my @monsters = qw( godzilla blob tingler kong dorisday );
return @monsters;
}
p5_data();
END
my @stuff = $p5.run: $perl5_code;
say @stuff; # [5]
Run Code Online (Sandbox Code Playgroud)
我以为我会得到存储在数组中的字符串列表,但是相反,它的行为就像是将其切换到标量上下文一样。
更新:
ikeami指出,返回对数组的引用会更好:
return \@monsters;
Run Code Online (Sandbox Code Playgroud)
但是,执行此操作后,您将在@stuff数组的第一个元素中得到一个数组:
my @stuff = $p5.run: $perl5_code;
Run Code Online (Sandbox Code Playgroud)
另一种方法(通过阅读Inline :: Perl5文档)是在$p5.run
定义a perl5子对象之后,从perl6调用它的:
my @stuff = $p5.call('p5_data');
Run Code Online (Sandbox Code Playgroud)
然后列表return(return @monsters;
)如我所料被加载到数组中:
[godzilla blob tingler kong dorisday]
Run Code Online (Sandbox Code Playgroud)
这是最近安装的Inline :: Perl5版本0.40,位于“基于实现Perl 6.d的MoarVM版本2019.03构建的Rakudo Star版本2019.03.1”上。
Update2:因此,似乎“运行”表示标量上下文,而“调用”表示列表上下文。
use Inline::Perl5;
my …
Run Code Online (Sandbox Code Playgroud) 默认情况下,Raku 的 "die" 报告 "die" 所在的行号,如果你想要调用上下文的行号,ala "carp" with perl 5 怎么办?
在 Raku 中,标量可能是不可变的,也可能是实际变量:
my $a := 6; # constant
my $b = 6; # variable
Run Code Online (Sandbox Code Playgroud)
是否有一种编程方法来检查标量是否不可变,而无需尝试更改它并查看它是否有效?
给定两个对象,在 Raku 中是否有一种简单的方法可以在它们的继承树中找到最近的共同祖先?
对此已经有一些通用的答案:
我想知道 Raku 是否已经内置了惯用的解决方案。
我只是在看 Raku 的 MagickWand 接口到 imagemagick:
https://modules.raku.org/dist/MagickWand
而且我看不到任何叠加两个图像的方法。在 examples/01-hello.pl6 中演示了一个 MagickWand.append-wands 来平铺图像,我看到代码中有一个 montage 方法(用于创建移动 gifs?),但我没有看到任何类似于我的 Flatten 方法的东西已与 perl 的 Image::Magick 一起使用。