关于hash
作为trans
的论点的另一个问题。在以下代码中,简单地hash
会产生不正确的结果,但将其替换为keys
和values
会使其正确无误。有什么问题?
my @alph1 = <a+ b+ c+ d+ e+ f+>;
my @alph2 = <A_ B_ C_ D_ E_ F_>;
my %h;
%h{ @alph1 } = @alph2;
my $str = 'a+bc de+f';
my $text = $str.trans(%h);
say $text; # A_BC DE_F (incorrect)
$text = $str.trans(%h.keys => %h.values);
say $text; # A_bc dE_f (correct)
答案 0 :(得分:5)
我认为你误解了.trans
的作用。您指定一系列字符以更改为其他字符。您没有指定将字符串更改为其他字符串。
答案A_BC DE_F
是正确的答案,因为a
被A
取代,+
被{{1}取代} {},_
替换为b
,B
替换为c
等。
也许我们应该引入一个C
版本,它需要.subst
个匹配项和替换项。同时,您可能必须创建一个循环,该循环遍历哈希的键/值并使用它调用Hash
。 (https://docs.perl6.org/routine/subst)