繁体   English   中英

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

[英]Escaping '$' for a range of Perl arguments

我想做相当于:

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

在Perl中。 在Perl中会是什么样?

for ( @arg ) {
    s/\$/\\\$/g;
}

应该做到的。 如果您坚持只处理前10个参数,请将第一行更改为:

for ( @arg[0..9] ) {

如果只是美元符号$您希望逃脱,那么我将使用depesz的解决方案进行简单的替换。 但是,perl具有内置功能来处理转义的元字符quotemeta

@arg = map quotemeta, @arg;

请注意,这会转义所有元字符,而这可能不是您想要的。

在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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM