trans
是一个非常有用和强大的工具,但对我来说仍然有点神秘。
我仍然不明白文档中的这个短语:
如果使用键和值列表,也可以替换子字符串。
如果键和值长于一个符号,算法是什么?
以下测试代码探讨了. trans
如何处理“冲突”键。为什么第一对的工作方式不同,具体取决于它是单独使用还是由第二对伴随使用?
my Pair @trans =
ab => '12',
bc => '34',
;
my $str = 'ab';
say "both trans: $str.trans(@trans)"; # 13
say "1st trans: $str.trans(@trans[0])"; # 12
使用哈希而不是对列表会产生不同的结果:
my %trans =
ab => '12',
bc => '34',
;
my $str = 'ab';
say "both trans: $str.trans(%trans)"; # 12
(我知道在hash
中,配对可以按任何顺序进行,但在列表
的第一个示例中,它是第一个配对,如果存在第二个配对,则不会完全使用)
(我不是100%确定以下内容,但我必须跑。)
. trans
需要一个或多个配对参数来共同描述所需的翻译。
P6将配对键字符串的第N个字符映射到配对值字符串的第N个字符。
因此. trans:"ab"=
P6将配对键列表的第N个字符串映射到配对值列表的第N个字符串。
因此. trans:("ab","bc")=
根据键是否包含一个字符串或它们的列表,单个对的翻译以上述两种形式中的一种或另一种进行。
对列表的转换只是对每个对重复该过程,根据该对的键执行第N个字符或第N个字符串映射。
. trans
如何使用“冲突”键
给定一个配对列表,P6首先尝试第一个配对,如果不匹配,则尝试第二个配对,依此类推。
我需要探索lizmat现在的想法,以及她在之前关于. trans
的回答中说以下内容时的意思:
我认为您误解了. trans
的作用。您指定要更改为其他字符的字符范围。您没有指定要更改为另一个字符串的字符串。
我觉得你从文档中引用的句子有点模棱两可:
如果使用键和值列表,也可以替换子字符串。
这意味着传递给. trans
的一对的(单个).key
属性存储的是字符串列表而不是单个字符串,同样对于一对的单个.value
属性也是如此。