0

我想做相当于:

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

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

4

3 回答 3

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

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

for ( @arg[0..9] ) {
于 2013-02-11T16:15:12.367 回答
2

如果它只是您希望逃脱的美元符号$,我会使用depesz 的解决方案进行简单的替换。然而,perl 有一个内置函数来处理转义元字符quotemeta

@arg = map quotemeta, @arg;

Note that this escapes all meta characters, which may not be what you want.

于 2013-02-11T16:24:41.287 回答
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。

于 2013-02-11T16:15:33.033 回答