作者: 藤岡和夫
日時: 2007/5/30(21:08)
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