Perl についての質問です。


前回に続く質問なのですが、http://q.hatena.ne.jp/1190815879

固定する変数の宣言で、requireを使い、他のファイルで

my $YOMIKOMI_KAZU = 4;

などしてまとめる事にしました。

しかし、ちょっとEclipce上でおかしいのです。きちんとrequireしているのですが、下部のウインドウ上にエラーメッセージが出てきます。

これは、なぜでしょうか?

どなたか、Eclipceを利用してPerlを作っている方は教えていただけないでしょうか?_

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:2007/09/27 09:46:04
  • 終了:2007/10/04 09:50:03

回答(2件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/09/27 09:57:41

ポイント35pt

http://www.futomi.com/lecture/local/index.html

my ってつかるから駄目なんじゃないかな?

グローバル変数扱いだと思うので。

id:zachouR

すいません。エラーメッセージを入力し忘れていました。

宣言する部分は

require "kankyou.pl";

で、使用するとき、$kankyou::YOMIKOMI_KAZU;

とするとうまく行きました。これであっているのでしょうか?

ちなみに、my宣言しています。

2007/09/27 10:10:33
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/09/27 10:03:06

ポイント35pt

Eclipse のどの Plugin を使っているか明示しないと回答しにくいですが。


一般に Perl の require/use は Perl のライブラリ用ディレクトリかカレントディレクトリを基準にファイルを探します。

スクリプトファイルの位置が基準ではないので Eclipse とそれ以外の環境でカレントディレクトリの位置が違う場合は読み込めないです。


これを変更するには環境変数 PERL5LIB か use lib プラグマを使ってライブラリの検索パスを追加します。

サーバにインストールされていないPerlモジュールを使うには - Sakura scope

id:zachouR

すいません、上記の方にも書きましたが、使用するときに、$kankyou::YOMIKOMI_KAZU;

とするとエラーメッセージが消えました。

kankyou.plの中で変数はmyにしているのですが、これで大丈夫なのでしょうか?

質問が足らず、すいません。

2007/09/27 10:13:27
  • id:zachouR
    すいません。エラーメッセージを入力し忘れていました。

    宣言する部分は
    require "kankyou.pl";

    で、使用するとき、$kankyou::YOMIKOMI_KAZU;
    とするとうまく行きました。これであっているのでしょうか?

    ちなみに、my宣言しています。
  • id:zachouR
    エラーメッセージは、
    Global symbol "$YOMIKOMI_KAZU" requires explicit package name

    プラグインはEPICです。
  • id:b-wind
    package 宣言してるなら、参照時にパッケージ名は必要。
  • id:zachouR
    いろいろ、助言ありがとうございました。最終的に、

    main.cgi==================================

    use kankyou;

    print "$kankyou::YOMIKOMI_KAZU";

    ==========================================

    kankyou.pm================================

    package kankyou;

    our $YOMIKOMI_KAZU = 4;

    1;
    ==========================================

    以上のようにして、うまく行きました。理由はよくわからないのですが、、、。

    とりあえず、当初の目的である、「別ファイルに変数を設定」は達成することができました。
  • id:tezcello
    package 宣言をしていない(=デフォルト)ときは、package main であると見なされたはずです。
    ですから、kankyou.pm の方で、package main; とするとメインプログラムの方でもそのまま($kankyou::YOMIKOMI_KAZU ではなく$YOMIKOMI_KAZU のまま)使えるようになるのでは?
    検証無しに書いていますので、チョッと自信が無いです。
  • id:zachouR
    ありがとうございます。

    さっそくやってみます。

    余談ですが、今の時点では、$kankyou::YOMIKOMI_KAZUと書いた方が「ああ、これはkankyou.pmのやつなんだな、、、。」と解ってお得だなーと考えておりました。

    今後は、package main;で行こうと思います。

    myだと、読めなかったので、ourにしたのですが、これはour宣言で正解なのでしょうか?
  • id:b-wind
    >今後は、package main;で行こうと思います。
    通常は main で問題ないが、環境によっては互換性に問題が出るのでやめたほうがよい。
    それよりは、Exporter を使った方が正攻法。
    http://www.rfs.jp/sb/perl/04/01.html#2%EF%BC%8E%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB

    >myだと、読めなかったので、ourにしたのですが、これはour宣言で正解なのでしょうか?
    正解。
    ブロックの外で my を宣言した場合たしかファイルスコープになるはず。
    つまり require した側からは直接使えない。
  • id:zachouR
    ありがとうございます。

    では、今後は$kankyou::YOMIKOMI_KAZUとして、使っていきたいと思います。

    ourで正解なんですね、よかったー。

    >KUROX さん
    >tezcello さん
    >b-wind さん
    今後ともよろしくお願いいたします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません