另一个关于哈希作为反转论证的问题.在下面的代码中,简单地使用hash会得到不正确的结果,但是用键和值替换它会使其正确.怎么了?
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)
解决方法
我想你误解了.trans的作用.您可以指定要更改为其他字符的字符范围.您没有指定要更改为其他字符串的字符串.
所以答案A_BC DE_F是正确答案,因为a被A代替,被_代替,b代替B,c代替C等.
也许我们应该引入一个.subst的版本,它采用哈希的匹配和替换.同时,您可能必须创建一个循环,该循环遍历散列的键/值并使用它调用.subst. (https://docs.perl6.org/routine/subst)