• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlで変数中のエスケープされた特殊文字を展開)

Perlで変数中のエスケープされた特殊文字を展開する方法

このQ&Aのポイント
  • Perlで変数に既に格納されているエスケープされた特殊文字を、もとの文字に展開する方法について解説します。
  • エスケープされた特殊文字は、ダブルクォートで囲まれた文字列には展開されますが、変数内の文字列には展開されません。
  • 代入時に展開が行われるため、既に変数内にエスケープされた特殊文字が含まれている場合、展開されないことに注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

2文字限定でよければ、正規表現の置換を使って変換することができると思います。 my $foo = $ARGV[0]; $foo =~ s/\\./qq("$&")/eeg; print "$foo\n"; $ perl unescape.pl 'abc\tdef\\ghi' abc   def\ghi シングルクォート内での \\ の扱いは、Bash と Perl では異なります。Bash では \\ のままですが、Perl では \\ を \ に変換します。

stosh666
質問者

お礼

ありがとうございます。この方式で行くことにしました。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

脆弱性を考えなくて良い状況なら、eval を使えば簡単です。 $a = 'a\tb\n'; print $a , "\n"; $b = eval("\"$a\""); print $b , "\n"; $a の値が信頼できない場合は、 $b = $a; $b =~ s/\\t/\t/g; $b =~ s/\\n/\n/g; ・・・・・ print $b , "\n"; のように必要なだけ置換するくらいでしょうか。

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

eval を使えば出来そうです。 例) $hoge = 'hoge\thoge\n'; print eval "\"$hoge\""; ARGVの値でやると引数次第で任意のコードが実行できてしまうので、間接的に第3者から実行される可能性のあるプログラムなどでは危険ですが・・・。

参考URL:
http://itpro.nikkeibp.co.jp/article/Reference/20081008/316389/