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