Perl 6:trans(%h)vs trans(%h .keys =>%h.values)

时间:2017-10-12 08:00:36

标签: perl6

关于hash作为trans的论点的另一个问题。在以下代码中,简单地hash会产生不正确的结果,但将其替换为keysvalues会使其正确无误。有什么问题?

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)

1 个答案:

答案 0 :(得分:5)

我认为你误解了.trans的作用。您指定一系列字符以更改为其他字符。您没有指定将字符串更改为其他字符串

答案A_BC DE_F 正确的答案,因为aA取代,+被{{1}取代} {},_替换为bB替换为c等。

也许我们应该引入一个C版本,它需要.subst个匹配项和替换项。同时,您可能必须创建一个循环,该循环遍历哈希的键/值并使用它调用Hash。 (https://docs.perl6.org/routine/subst