電子書籍の厳選無料作品が豊富!

返りや変数の「値」の中にどうしても $+アルファベットのものがあります。これは覆せない前提です。

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

A 回答 (12件中11~12件)

>少なくとも私のところでは(略)という出力になります。



私の環境ではそうなりませんでした。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>

この回答への補足

やはり、ドル記号とそれに続く英数字 (変数名として使えない文字が出てくるまで) が変数として展開されているようです。

私の環境も Perl のプラットフォームが Unix 系なだけで、Perl 5.8.8 ですし、この環境の人も多いと思われるのですが。

今は必須の乗り越えるべきステップなので、原因はともかく回避策が必要です (渡ってくる値をあらかじめエスケープすることはできませんし、置換などにかけるとその際すでに先のとおり展開されます)。

補足日時:2008/02/12 16:12
    • good
    • 0

どういう記述で「展開されてしまう」のかを書いてください(この項、補足要求にします)。

たとえば

  $a ='$vars';
  $b = $a;
  $vars = 'test';
  print "$b<br />";

などはキチンと「$vars」という出力になりますよね?「test」が出力される状況には遭遇したことがありません。「何らかの処理(たとえば置換)」というのは具体的にどういう処理でしょうか?

この回答への補足

#!/usr/local/bin/perl
#
# test.pl

$a = 'yInH4u$a6Fja/uW$gk8.Nf3t';
print $a;
exit();

少なくとも私のところでは
perl /path/to/test.pl

yInH4u/uW.Nf3t
という出力になります。

補足日時:2008/02/12 09:17
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/12 09:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!