作者: Koichi Yamamoto
日時: 2003/1/18(19:37)
こんにちは、山本です。

"藤岡和夫 <kazuf@...>"さんは書きました:
> > <script language="PerlScript">
> > $window->document->write( 'Hello' )
> > </script>
> 
>  これは、";"が抜けているのでエラーになりますね。

この行以降にPerlのスクリプトやPerlScriptの<script>タグが無ければ
エラーにならないはずです。perlsynなどでは一部例外を除いてsemicolonは
必須と説明されていますけど。

>  山本さんが掲示板でActviePerl5.8でもPerlScriptにまだ日本語が書けないと
> 書かれていましたが、こうすれば動きますね。少なくともIEでは・・・
> 
> <html>
> <body>
> <script language="PerlScript">
> use encoding "shiftjis", Filter=>1;
> use utf8;
> use encoding 'shiftjis';
> $window->document->write( 'Hello<br>' );
> $window->document->write( 'ハロー<br>' );
> </script>
> </body>
> </html>

IEをabendさせるには「ハロー」程度では短すぎます。
もっとたくさん全角日本語文字を記述しないとダメです。

それから上記スクリプトは「use encoding」行と「use utf8」行が
無くても動作します。

>  ArrangeNoteで試しましたがだめですね(;_;)

逆に、ArranegNoteで正常に全角文字入りのPerlScriptを
動作させるのであれば、こうすれば動くようになります。

$ANScript->Message( "こんにちは、世界。" );
__END__
++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++
                   :
        padding用に何行か記述する
                   :
++++++++++++++++++++++++++++++++++++++++++++

ActivePerl build500番台の頃、Visual C++のデバッガで追いかけたことが
ありますが、MBCS文字列が含まれているPerlScriptのスクリプトを実行すると
動作不安定になるのは、PerlSE.dllの中で割り当てられるバッファが不足して
いて、2バイト文字の数だけバッファオーバーランしていたように
見えました。build800番台のActivePerl5.8も同じような症状が見受けられます。


TclScriptは、Tcl外部のUnicode(UTF-16?)とTcl内部のUTF-8の相互変換が
ちゃんと作り込まれているので、全角日本語も維持列が含まれていても
正常に動作できます。なお、スクリプトを記述するときの文字コードは
cp932でもUnicodeでも構いません。(ArrangeNoteはcp932のみですが。)

それから、うちのマシンではTclScriptが安定してabendしなくなりました。
開発中はいつもWindows2000の「休止状態」でシステムを止めていましたが、
一度「シャットダウン」して以来、TclScriptは一度もabendしていません。
日本語を使うのであれば、PerlScriptよりTclScriptを使ってみてください。

--
Koichi Yamamoto, 
http://homepage3.nifty.com/yamakox/