新規記事投稿 フォロー記事投稿 記事のキャンセル
From: TAD <hotani@mua.biglobe.ne.jp>
Subject: Re: サブルーチンが動かない?
Date: 2000/06/05 14:11:55
Reference: mesh.forum.4/00213

6月3日に、にあさんは書きました。

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

全然構わないです。が、
やっぱり私では役不足なのでちゃんとにあさんも出てきてください。(#^_^#)

今回の件でも的はずれなことをしてしまってkobaさんにもご迷惑をおかけしてしまいました。
すみません。m(_ _)m

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

>さて、原因は何かと言いますと、perlの最近のヴァージョンでは、スレッドの機能を
>サポートしたヴァージョンがあるそうなんですが、それらのヴァージョンでは、
>$_ 変数の typeglob が出来なくなったそうなのです。
># つまり my で宣言した変数などとおなじ扱いです。
>
>うぇぶ会議室のスクリプトでは、いくつかの場所で typeglab による変数受け渡しを
>使っていますが、将に問題となっている出力ルーティンの辺りは $_ の typeglab を
>ふんだんに使っている所でして、これらの typeglab が全て効かないと仮定すると
>ご覧になったような現象が現われるはずです。

ということは、下のようなmatch演算子も

$_ = $hoge;
if (m/^Huga/i) {
  &com;
}

下のようにちゃんと書く必要があるってことですか。

if ($hoge =~ m/^Huga/i) {
  &com;
}


それと、下のようなのはどうなるんでしょう。

sub hoge{
  local($ho) = $_;

  ...
}

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

これは、どのくらいのボリュームになるんでしょうか。

単純に上に書いたように記述を変更するだけでよいのでしょうか。
それともその他、考慮すべきことがあるのでしょうか。

>後ろ向きの解決法は、thread 未対応の古い perl を使うことです。(^^;;

古いわけではない、ってことは別記事にある通りですね。
でもまぁ、後ろ向きというか、ユーザ側ではそうできないことが多いですから
あまり解決にはならないんじゃないですか。

># さすがにメジャーヴァージョンアップから3年以上が過ぎてしまい、
># 色々な所で時代の流れから取り残されつつあります。

「色々な所」、ですか。他にもあるのか... (^^;;

>## そのことは良く分かってはいるんですが、なんともはや...

少しずつでもいいですから、ねぇ、にあさん。(#^_^#)