我想做相同的事情:
for (int i = 0; i < 10; i++)
{
arg[i] = arg[i].Replace("$", @"\$");
}
Perl中的这在Perl中会是什么样子?
答案 0 :(得分:6)
for ( @arg ) {
s/\$/\\\$/g;
}
应该做的伎俩。如果您坚持只使用前10个参数,请将第一行更改为:
for ( @arg[0..9] ) {
答案 1 :(得分:2)
如果只有 美元符号$
您希望逃避,我会使用depesz's解决方案进行简单替换。但是,perl有一个内置函数来处理转义的元字符quotemeta
:
@arg = map quotemeta, @arg;
请注意,这会转义所有元字符,这可能不是您想要的。
答案 2 :(得分:1)
在Perl中,您可以使用map
将列表转换为另一个列表。所以你可以说
@arg = map { s{\$}{\\\$}g; $_; } @arg;
您也可以使用for
的后缀形式,因为默认循环变量是原始值的别名。
s{\$}{\\\$}g for @arg;
这相当于:
foreach my $thing( @arg ) {
$thing =~ s{\$}{\\\$}g;
}
如果你想要超级详细,你可以做C风格的循环:
for ( my $i = 0; $i < @arg; $i++ ) {
$arg[$i] =~ s{\$}{\\\$}g;
}
......但那不是特别的Perlish。