作者: dune
日時: 2004/2/18(02:09)
極悪です。

機械伯爵 さんの [TSabc:340] ish の現代版 から
>> ファイル名を画像ファイルと同じ拡張子にして大きさゼロの画像フ
>> ァイルを出力するのは cgi の定石なので、たいていのスクリプト
>> 言語ならできますよね。
>
> 定石ですか・・・ヤバげな定石だよなぁ(笑)

拡張子までは変えないのかな。HTML を表示しているときにこっそ
り IP アドレスやブラウザの統計、javascript と併用して
referrer が取得できるといった程度のことですが、気が付くと気
持ち悪いですね。僕も CGI 覚え始めの頃はやりましたけど、やる
ならコソコソせずにアクセスカウンタにでもしろという声がした気
がします。

>> ところで下のコピーは正確ではないですが、どういう原理で動いて
>> いるか想像がついてニヤリとする人も多いでしょう。強い・弱いは
>> おいといて、これと同じ原理でバイナリをスクリプト(perl)にく
>> っつけるのも面白いかな(ウィルスのキャリアになりそうで怖いで
>> すが)。
>
> ・・・中間が抜けてるの、わざとですか?
>
> ・・・すっごく気になるんですけど・・・(汗)

コピーが正確でないのは、正確にコピーするのが面倒だったからで
す(それと、100! を1行で表示するためにコマンドプロンプトを 200
桁まで広げていたので、その設定を戻してからコピーするのが面倒だっ
たというのもある(笑)。もう少しヒントを出すと、

D:% cat hello.spy | tr "\x20\x09" "_>"
#!/usr/bin/perl
use_SuperPython;

____________________________________________________________
____________________________________________________>_______
____________________________________________________________
_______________________________________________>____________
____________________________________________________________
_________________________________>__________________________
____________________________________________________________
________________________>___________________________________
____________________________________________________________
_____________________>________________________________>_____
_____________________________>______________________________
__________________________________________>_________________
____________________________________________________________
________________________>___________________________________
____________________________________________________________
_____________>______________________________________________
____________________________________________________________
__>_________________________________________________________
______________________________________________________>_____
_______________________________________>____________________
____________>_______________________________________________
____________________________________________________________
____________>_______________________________________________
____________________________________________________________
____>_______________________________________________________
___________________________________________________________>
____________________________________________________________
________________________________________________>___________
____________________________________________________________
_____________________________>______________________________
________________>___________________________________________
_________________________________________________>__________
____________________________________________________________
________________________________________>___________________
_______________>____________________________________________
_______________>

D:%

ってなかんじ。実は文字の代わりに文字コードの数だけスペースを
並べてタブで区切ってます。最初はスペースが 112 = 0x70 個並ん
でいるので、print "hello, world." の p なのでしょう。

>※多分Perlスクリプトの中から、Perlスクリプトに埋め込まれた文字列
> をPythonで動かしてる、といった感じじゃないかな、と思うのです
> が・・・

そうです。ただし文字列を実行しているのも perl です。
SuperPython というモジュールの中身は

  use Filter::Simple sub{ s/( *)\t/chr(length($1))/ge };

と書かれてるわけですが、これは指示した関数で自分自身を加工し
てから実行する、という意味の、一種のプリプロセッサになります。

空白とタブの代わりに $ と % を使って SuperPerl をでっちあげ
てもいいけど、それだと文字が見えてしまうし拡張子も .spl にな
って面白味が減ってしまいますね。

モジュールの使い方の説明には
>use SuperPython;
># (SuperPython code follows here)
>no SuperPython;
># regular Perl code resumes
># (not recommended; regular Perl is too hard to 
># understand and maintain)
とか、
>I look forward to working with the Python community to 
>port this module to work with Python.
などと書いてあって笑わせてくれます。
-- 
FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?