WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perl require使用時の挙動

0:[投稿] ロキ [2006/11/10 18:05 ] [環境:winXP perl]

はじめまして。
掲示板を利用させていただきます。

main.pl:メイン
a.pl:ライブラリ
b.pl:ライブラリ

perlで自分でライブラリを作成し
a.plの中でb.plを
require "b.pl"
として読み込ませました。
しかしrequireを記述する場所によって
a.plライブラリ内の変数の中身がa.plライブラリ内で参照しようとしても空になってしまうのです。
requireをソース(ライブラリの)の一番下に記述すると
正常に動くのですが・・。
わかりにくい文章で申し訳ありません。原因のわかる方ご教授ください。


1:[回答] miz [2006/11/11 23:01 ]

最後に書くと実行できると云うことなら、ライブラリ用ファイルの終端に

1;

という一行が無いためにエラーを起こしてるのかな?


2:[質問] ロキ [2006/11/13 10:30 ]

エラー解決しました^^
各ライブラリで使用する.plファイルをrequireしていたのですが、それをはずしても普通に動きます。
もしかしてjavaのクラスのような使用方法ではなくjspのimportに近いのでしょうか?
要するにrequireの部分が展開されてrequire先のplのソースがそこにでてくる・・みたいな
わかりにくくてすいません;;


3:[回答] miz [2006/11/18 18:01 ]

>もしかしてjavaのクラスのような使用方法ではなくjspのimportに近いのでしょうか?
>要するにrequireの部分が展開されてrequire先のplのソースがそこにでてくる

javaの話は、かえって意味がつかめません。javaには、requireに相当するものはないんじゃないかと思ってましたが?

perlで外部スクリプトの読み込みには、module読み込みのためのuse節(必ず、実行前に読み込みチェックが行われる)と、記述部分に、展開されるrequire節とがあります。

よって、use節はどこに記述しようとも、一番最初にチェックされるので、ここにエラーがあると全部動きません。

requireは、記述部分に展開するので、requireを記述する前に、その中にある関数などを呼び出すとエラーになります。
また、条件分岐の中に書くと、条件によっては、読み込まれないということも起こります。
使わない時には、読み込ないようにうまく条件を記述すると、メモリー節約、load時間短縮になります。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]