- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perlで変数中のエスケープされた特殊文字を展開)
Perlで変数中のエスケープされた特殊文字を展開する方法
このQ&Aのポイント
- Perlで変数に既に格納されているエスケープされた特殊文字を、もとの文字に展開する方法について解説します。
- エスケープされた特殊文字は、ダブルクォートで囲まれた文字列には展開されますが、変数内の文字列には展開されません。
- 代入時に展開が行われるため、既に変数内にエスケープされた特殊文字が含まれている場合、展開されないことに注意が必要です。
- みんなの回答 (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 では \\ を \ に変換します。
その他の回答 (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者から実行される可能性のあるプログラムなどでは危険ですが・・・。
お礼
ありがとうございます。この方式で行くことにしました。