On Wed, 30 May 2007 00:13:14 +0900
"Bruce." <kbk@...> さんwrote:
> "(?{ code })"
> WARNING: This extended regular expression feature is
> considered highly experimental, and may be changed or deleted
> without notice.
>
> This zero-width assertion evaluates any embedded Perl code. It
> always succeeds, and its "code" is not interpolated.
> Currently, the rules to determine where the "code" ends are
> somewhat convoluted.
>
> ということで任意のPerlのスクリプト片、さらにはOSに対するコマンドも
> 埋め込むことができるというわけです。
> 実は現在のバージョンでは、無指定ではこの機能は有効になりません。
> プラグまで宣言してやる必要がありますが、5.005ではそのようには
> なっていなかった(危険性が認識されていなかったのでしょう)と記憶しています。
CGIそのもので試してみましたが、Apacheでは何も表示されないので、ソース
を見ると途中の問題の箇所の手前でHTMLの出力が止まっていました。しかし、簡
単なサンプルをコマンドプロンプトで試したところ動作するので、anhttpdに変
えて試したところ、
/((?{print "
Hello!
";}))/: Eval-group not allowed at runtime, use re 'eval '(折り曲げ)
at C:\anhttpd\cgi-bin\awakening\tendai.cgi line 32, chunk 1.
のようなメッセージが出力されました。指示に従って、スクリプトに
use re 'eval';
の行を加えて実行すると、出力されるようになりました。5.005_03もCGIのセキュ
リティには配慮されていたようですね。
なかなか、TSNETは勉強になります^^)v
藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html