使用Perl6方式将具有值对的字符串解析为散列

use*_*447 6 perl6 raku

我有一个看起来像这样的字符串:

width=13
height=15
name=Mirek
Run Code Online (Sandbox Code Playgroud)

我想把它变成哈希(使用Perl 6).现在我这样做:

my $text = "width=13\nheight=15\nname=Mirek";
my @lines = split("\n", $text);
my %params;
for @lines {
    (my $k, my $v) = split('=', $_);
    %params{$k} = $v;
}
say %params.perl;
Run Code Online (Sandbox Code Playgroud)

但我觉得应该有更简洁,更惯用的方式来做到这一点.有没有?

Chr*_*oph 9

在Perl中,通常有多种方法可以做到这一点,而且当你的问题涉及解析时,一种解决方案当然是正则表达式:

my $text = "width=13\nheight=15\nname=Mirek";
$text ~~ / [(\w+) \= (\N+)]+ %% \n+ /;
my %params = $0>>.Str Z=> $1>>.Str;
Run Code Online (Sandbox Code Playgroud)

另一个有用的数据提取工具是comb(),产生以下单行:

my %params = $text.comb(/\w+\=\N+/)>>.split("=").flat;
Run Code Online (Sandbox Code Playgroud)

您也可以这样编写原始方法:

my %params = $text.split("\n")>>.split("=").flat;
Run Code Online (Sandbox Code Playgroud)

甚至更简单:

my %params = $text.lines>>.split("=").flat;
Run Code Online (Sandbox Code Playgroud)

事实上,只要您的数据格式不会变得更复杂,我就可能会选择那个.

  • 哇 - 我喜欢Perl 6! (3认同)