新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mvg.biglobe.ne.jp>
Subject: Re: サブルーチンが動かない?
Date: 2000/06/03 01:52:20
Reference: mesh.forum.4/00212

にあです。しばらく出てこられなくて済みませんでした。m(__)m
# TADさんやいしどうさんには迷惑かけっぱなしですね。(^^;;

6月2日に、TADさんは書きました。

>6月2日に、kobaさんは書きました。
>
>> ダウンロードし、該当のディレクトに格納した後にやったことは以下のとおり
>>です。(ほかのことはやってません) OSは TurboLinux 4 、Perlは最初からついていた Perl5 です
>>・site.plを修正 -> $forumroot などを自環境に設定
>>・各 CGIの先頭の行の修正 --> 自環境では /usr/bin/perl
>>・各ファイルのパーミションの設定
>>
>>これだけやってみて、
>>  http://www2.なんちゃら.jp/~koba/test/forum/index.cgi
>>とブラウザから指定(なんちゃらは、省略)
>> そして、ブラウザには Internal Server Error が出て、/var/log/httpd/error_log には
>>Premature end of script headers: /home/users/koba/public_html/test/forum/index.cgi
>>とかかれています。

うわぁぁ、これは恐れていたことが現実になったような気が... (^^;;

>うーん、index.cgiの問題でもなさそうに思えるんですけど
>ほかのPerlのスクリプトは動くんでしょうか。
>
>#!/usr/bin/perl
>print   "Content-Type: text/html\n\n";
>print   "<HTML><BODY><H1>It's OK!</H1></BODY></HTML>";
>exit(0);
>
>や
>
>#!/bin/sh
>echo 'Content-Type: text/html'
>echo ''
>echo '<HTML><BODY><H1>It's OK!</H1></BODY></HTML>'
>
>等を実行権をつけてコマンドラインからフルパス指定で実行するとどうなりますか。

たぶん、何の問題もなく動くことでしょう。予想が正しければ。(^^;;

>> そこで、念のため、各ファイルのあるディレクトに移動後 コマンドラインより
>>>perl index.cgi
>>と実行。・・・・・何も出力がない。次のプロンプトが表示されるだけ。

>> と同じで、「Bad Forum」 だけが出力されちゃって、HTMLを一切出力していないのと
>>同様です。

これらの動作から考えられる事は、一言で言うと「うぇぶ会議室」のスクリプトが
もはや時代遅れになってしまった、と言うことです、恐らく。(^^;;;

kobaさんに頼みがあるのですが、「perl -v」や「perl -V」の出力を
正確に教えていただけないでしょうか?


さて、原因は何かと言いますと、perlの最近のヴァージョンでは、スレッドの機能を
サポートしたヴァージョンがあるそうなんですが、それらのヴァージョンでは、
$_ 変数の typeglob が出来なくなったそうなのです。
# つまり my で宣言した変数などとおなじ扱いです。

うぇぶ会議室のスクリプトでは、いくつかの場所で typeglab による変数受け渡しを
使っていますが、将に問題となっている出力ルーティンの辺りは $_ の typeglab を
ふんだんに使っている所でして、これらの typeglab が全て効かないと仮定すると
ご覧になったような現象が現われるはずです。

と言うことで、前向きの解決法は、うぇぶ会議室のスクリプトを全て $_ の typeglab
無しに書き換えて、thread 機能対応の perl でも動くようにすること。そして、
後ろ向きの解決法は、thread 未対応の古い perl を使うことです。(^^;;

# さすがにメジャーヴァージョンアップから3年以上が過ぎてしまい、
# 色々な所で時代の流れから取り残されつつあります。
## そのことは良く分かってはいるんですが、なんともはや...