0

私は同等のことをしたい:

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

パールで。これは 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;

これにより、すべてのメタ文字がエスケープされることに注意してください。これは、必要なものではない可能性があります。

于 2013-02-11T16:24:41.287 に答える
1

mapPerl では、リストを別のリストに変換するために使用できます。だからあなたは言うことができます

@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 に答える