晴耕雨読

working in the fields on fine days and reading books on rainy days

Raku (Perl6) で要素が一つの配列の作り方

Perl6 (Raku) で要素が一つの配列(特にハッシュの配列または配列の配列)を定義しようとしたときに、Rubyのように書いていたらつまづいたので、メモを残します。

よくやるパターン

次に示すように、ハッシュの配列を定義しようとすると、ペア(Pair)の配列になってしまう問題があります。 もちろん、これは期待していない振る舞いです。

my @list = [
    { name => "foo", id => 1 }
];
@list.perl.say;

上の出力(ペアの配列)

[:id(1), :name("foo")]

解決法

{ } の末尾に , を入れることで、正しくハッシュと認識されます。 この問題は 2次元配列でも起きるようですが、同様に [ ] の末尾に , を入れれば良いです。

my @list = [
    { name => "foo", id => 1 }, # <= カンマがあることに注目
];
@list.perl.say;

上の出力(ハッシュの配列)

[{:id(1), :name("foo")},]

以上です。