私は同等のことをしたい:
for (int i = 0; i < 10; i++)
{
arg[i] = arg[i].Replace("$", @"\$");
}
パールで。これは Perl ではどのように見えるでしょうか?
私は同等のことをしたい:
for (int i = 0; i < 10; i++)
{
arg[i] = arg[i].Replace("$", @"\$");
}
パールで。これは Perl ではどのように見えるでしょうか?
for ( @arg ) {
s/\$/\\\$/g;
}
トリックを行う必要があります。最初の 10 個の引数のみを処理する場合は、最初の行を次のように変更します。
for ( @arg[0..9] ) {
エスケープしたいのがドル記号だけの場合は、単純な置換を使用してdepesz のソリューションを使用します。ただし、perl には、メタ文字のエスケープを処理する組み込み関数があります。$
quotemeta
@arg = map quotemeta, @arg;
これにより、すべてのメタ文字がエスケープされることに注意してください。これは、必要なものではない可能性があります。
map
Perl では、リストを別のリストに変換するために使用できます。だからあなたは言うことができます
@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ではありません。