質問: Perlのeval文で、 $str='hoge'; eval "print+$str"; とすると「hoge」と出力されます。 このとき+はスペースとして扱われているようなのですが、 そのことについてマニュアルなどに記載されていないようです。 eval "print+1+2"; の場合はちゃんと3と表示されるし、 きっとevalのほうで+を適当に解釈してるんだと思いますが、 それであってるんでしょうか。 またこのようなeval中で特殊に評価される文字があるのでしょうか。 できれば関連文献などを教えていただけるとなお嬉しいです。 マニュアルを見落としてる可能性もあるなあ。 そうだったら恥ずかしい。^^;
回答: 別に eval でなくても print + "abc\n"; で abc が出ますね。あと、 print - "abc\n"; だと、-abc が出ます。 これらから想像すると、数値に単項演算子の + や - をつけたのと 同じような解釈をしているようです。 というわけで、マニュアル perlop の Symbolic Unary Operators の節を見てみると(日本語のは持ってないので、英語のを簡単に訳 すと)、 「単項の "+" は(文字列に対してさえも)まったく何の効果も持たない」 とあります。 ついでに、 「単項の "-" は、オペランドが数値なら算術の否定。識別子なら、 "-" とその識別子をくっつけた文字列。オペランドの文字列が + か - で始まっていたら、それを逆にした文字列。」 とあります。つまり、 - "-abc" -> "+abc" なんですねぇ...。知らなかった... ^^