2
my $cmd = 'this is a "testin$g" ok';
print Dumper($cmd);

$VAR1 = 'これは "testin$g" OK';

my $cmd = 'this is a "testin$g" ok';
$cmd =~ s/\$/\\\$/;
print Dumper($cmd);

$VAR1 = 'これは "testin\\$g" でOK';

「これは "testin\$g" OK」のような文字列にしようとしています。$ の前の単一の \。しかし、$ を \$ に置き換えても、代わりに 2 になります。

4

2 に答える 2

6

正規表現と文字列はどちらも正しいです。Data::Dumper は文字自体をエスケープします。

単純な文字列を印刷するには、単に使用します

print $cmd."\n";

そして、あなたはそれが大丈夫であることがわかります。

また、これを試して、ダンパーが文字をエスケープする方法を確認してください

print Dumper('this is a "testin\$g" ok');
于 2013-10-30T15:17:57.817 に答える
1

あなたの代用は正しいです。$cmd以下を実行すると、バックスラッシュが 1 つしか含まれていないことがわかります。

print("$cmd\n");    # this is a "testin\$g" ok

Data::Dumper は、実行時に構造体に文字列を作成する文字列リテラルを出力します。

$VAR1 = 'this is a "testin\\$g" ok';

ダンプされた変数に含まれていることを示します

this is a "testin\$g" ok

なぜなら

this is a "testin\$g" ok

$VAR1実行時に割り当てられます

$VAR1 = 'this is a "testin\\$g" ok';
于 2013-10-30T15:51:40.520 に答える