perl6 同时替换为 s///?
perl6 Simultaneous substitutions with s///?
有没有办法用s///同时替换?例如,如果我有一个包含 1、2、3 等数字的字符串,我想用 "tom" 代替 1,用 "mary" 代替 2,用 "jane" 代替 3 ], 等等?
my $a = "13231313231313231";
say $a ~~ s:g/1/tom/;
say $a ~~ s:g/2/mary/;
say $a ~~ s:g/3/jane/;
有没有同时完成所有 3 个步骤的好方法?
谢谢!!!
lisprog
最简单的方法可能是为您的替换制作地图,然后引用它。
my $a = "123123";
my $map = Map.new(1 => "tom", 2 => "mary", 3 => "jane");
$a ~~ s:g/\d/$map{$/}/;
say $a
"tomemaryjanetommaryjane"
如果您只想映射某些值,您当然可以更新匹配:
my $a = "12341234";
my $map = Map.new(1 => "tom", 2 => "mary", 3 => "jane");
$a ~~ s:g/1 || 2 || 3/$map{$/}/;
say $a
"tomemrayjane4tommaryjane4"
对于像您的示例这样的替换,您可以使用 trans
。提供要搜索的内容列表和替换列表:
my $a = "13231313231313231";
$a .= trans(['1','2','3'] => ['tom', 'mary', 'jane']);
say $a;
tomjanemaryjanetomjanetomjanemaryjanetomjanetomjanemaryjanetom
对于简单的字符串,您可以使用引号进行简化:
$a .= trans(<1 2 3> => <tom mary jane>);
有没有办法用s///同时替换?例如,如果我有一个包含 1、2、3 等数字的字符串,我想用 "tom" 代替 1,用 "mary" 代替 2,用 "jane" 代替 3 ], 等等?
my $a = "13231313231313231";
say $a ~~ s:g/1/tom/;
say $a ~~ s:g/2/mary/;
say $a ~~ s:g/3/jane/;
有没有同时完成所有 3 个步骤的好方法?
谢谢!!!
lisprog
最简单的方法可能是为您的替换制作地图,然后引用它。
my $a = "123123";
my $map = Map.new(1 => "tom", 2 => "mary", 3 => "jane");
$a ~~ s:g/\d/$map{$/}/;
say $a
"tomemaryjanetommaryjane"
如果您只想映射某些值,您当然可以更新匹配:
my $a = "12341234";
my $map = Map.new(1 => "tom", 2 => "mary", 3 => "jane");
$a ~~ s:g/1 || 2 || 3/$map{$/}/;
say $a
"tomemrayjane4tommaryjane4"
对于像您的示例这样的替换,您可以使用 trans
。提供要搜索的内容列表和替换列表:
my $a = "13231313231313231";
$a .= trans(['1','2','3'] => ['tom', 'mary', 'jane']);
say $a;
tomjanemaryjanetomjanetomjanemaryjanetomjanetomjanemaryjanetom
对于简单的字符串,您可以使用引号进行简化:
$a .= trans(<1 2 3> => <tom mary jane>);