为一系列Perl参数转义'$'

时间:2013-02-11 16:10:28

标签: perl

我想做相同的事情:

for (int i = 0; i < 10; i++)
{
   arg[i] = arg[i].Replace("$", @"\$");
}
Perl中的

这在Perl中会是什么样子?

3 个答案:

答案 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。