アプリ版:「スタンプのみでお礼する」機能のリリースについて

perlプログラムで
サブルーチンの中で、別のサブルーチンを呼び出していますが、
なぜか認識しません。
KCatchでは以下の表示をしています。
Catch: Mon Sep 22 07:56:36 2003
-------------------------------------------------
[regist.cgi:375:die] Undefined subroutine &main::lock called.
>&lock;
-------------------------------------------------
regist.cgi with Perl 5.00502 for freebsd

サブルーチン名には頭に & を付けて呼び出しています。
サブルーチンは、スクリプトの最後にまとめてあります。
同じサブルーチンは、他のスクリプトでも利用していますが、
エラーは出ていないのですが。

何が原因か、わかりません。
関係ないかもしれませんが、プログラム最初の方でuse strict;の宣言をしています。
他のサブルーチンも認識しません。
KCacthの表示は同じ
&main::サブルーチン名 called になっています。
よろしくお願いします。

A 回答 (2件)

下記前提でよいでしょうか。


&lock(); ・・・(lockを呼び出している箇所)

sub lock    ・・・サブルーチン:lockの定義
{
・・・
}
上記は1つのソースファイル上にある。

とすると、考えられるのは、
1.undef (&lock); により未定義にしている。
2.__DATA__のあとにsub lockを定義している為、サブルーチンとして認識されない。(__END__も同様)
です。上記の2点はOKでしょうか?
    • good
    • 0
この回答へのお礼

tatsu99さん 
ご指摘ありがとうございます。

2.__DATA__のあとにsub lockを定義している為、でした。
perl初心者で__DATA__の使い方を知りませんでした。
無事解決しました。

お礼日時:2003/09/25 08:28

これだけではなんとも言えません(^^;


サブルーチンが定義されていないようにPerlには見えるということなのでしょうけれど。

まず、strict宣言についてですが、
一度はずして実行し、確認してみればいいかと思います。
(はずして動かなくなると言うことは普通ありませんから)

一瞬スペルミスの類かとも思いましたが、
前回の書き込みを見る限り他のルーチンも未定義になっているんですよね。
・・となると関係なさそうです。

一番可能性が大きそうなのは、
&lockが、mainパッケージではなくて、
他のパッケージ中にあるという状況ですが・・
(サブルーチンは別ファイルのライブラリやモジュール内を呼び出しているのでしょうか?)
    • good
    • 0
この回答へのお礼

natsuki_tkさん
ありがとうございます。
__DATA__の後にルーチンを呼び出しているのが、間違いだったようで、無事解決しました。

それとは別に、サブルーチンを別ファイルのライブラリやモジュール内で呼び出し方も、調べたいと思います。
ありがとうございました。

お礼日時:2003/09/25 08:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!