• 締切済み

ドル記号+アルファベット

返りや変数の「値」の中にどうしても $+アルファベットのものがあります。これは覆せない前提です。 このまま何らかの処理 (たとえば置換) に渡すと、あらかじめ値を書き出すか否かに関わらず、$ が文字としてみなされず、どうしても変数として展開されてしまいます。 もらう値については事前にエスケープできない (上記のとおり、前提です) ので、どうすればよいでしょう。

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>少なくとも私のところでは(略)という出力になります。 私の環境ではそうなりませんでした。Windows XPのコマンドプロンプト画面にて ActivePerlで確認。 ---------------------------------------- C:\Perl\Src>perl -version This is perl, v5.8.8 built for MSWin32-x86-multi-thread (中略) C:\Perl\Src>type test.pl $a = 'yInH4u$a6Fja/uW$gk8.Nf3t'; print $a; C:\Perl\Src>perl test.pl yInH4u$a6Fja/uW$gk8.Nf3t C:\Perl\Src>

-ROM
質問者

補足

やはり、ドル記号とそれに続く英数字 (変数名として使えない文字が出てくるまで) が変数として展開されているようです。 私の環境も Perl のプラットフォームが Unix 系なだけで、Perl 5.8.8 ですし、この環境の人も多いと思われるのですが。 今は必須の乗り越えるべきステップなので、原因はともかく回避策が必要です (渡ってくる値をあらかじめエスケープすることはできませんし、置換などにかけるとその際すでに先のとおり展開されます)。

すると、全ての回答が全文表示されます。
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

どういう記述で「展開されてしまう」のかを書いてください(この項、補足要求にします)。たとえば   $a ='$vars';   $b = $a;   $vars = 'test';   print "$b<br />"; などはキチンと「$vars」という出力になりますよね?「test」が出力される状況には遭遇したことがありません。「何らかの処理(たとえば置換)」というのは具体的にどういう処理でしょうか?

-ROM
質問者

お礼

しかし上記はテスト用ですが、実際は上記変数 $a に入っているような値がやってきて、それにたとえば |\$[a-zA-Z0-9]| でマッチさせようとしても一か所もマッチしません。

-ROM
質問者

補足

#!/usr/local/bin/perl # # test.pl $a = 'yInH4u$a6Fja/uW$gk8.Nf3t'; print $a; exit(); 少なくとも私のところでは perl /path/to/test.pl で yInH4u/uW.Nf3t という出力になります。

すると、全ての回答が全文表示されます。

関連するQ&A