[英]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.