另一个关于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)
Run Code Online (Sandbox Code Playgroud)
我想你误解了什么.trans.您可以指定范围的字符改变成其它字符.你没有指定一个字符串改变到另一个字符串.
所以答案A_BC DE_F 是正确的答案,因为a被替换A,+被替换_,b被替换B,c被替换C等等.
也许我们应该引入一个.subst带有Hash匹配和替换的版本.同时,您可能必须创建一个循环,该循环遍历哈希的键/值并.subst使用它进行调用.(https://docs.perl6.org/routine/subst)