我想做相当于:
for (int i = 0; i < 10; i++)
{
arg[i] = arg[i].Replace("$", @"\$");
}
在 Perl 中。这在 Perl 中会是什么样子?
我想做相当于:
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;
Note that this escapes all meta characters, which may not be what you want.
在 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。