Perl で質問があります。


みなさんは、プログラムを作る場合、環境変数というか、そのプログラム内での固定数値などを宣言することがあると思います。

たとえば、自分はプログラムの頭の方に、

my $YOMIKOMI_KAZU = 4;

としておいて、ソース内は

if ( $i == $YOMIKOMI_KAZU ) { print "ちゃんと読み込めたよ"; }

とかするようにしています。
しかし、プログラムを書いていくと

「この、my $YOMIKOMI_KAZU = 4;っていうの、ソースの頭じゃなく別のファイルで管理した方が良いなー。」
とおもいました。

Perlでこのような問題を解決する場合には、どのようにすればいいでしょうか?
よろしくお願いいたします。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:2007/09/26 23:11:22
  • 終了:2007/10/03 23:15:03

回答(4件)

id:yo-kun No.1

yo-kun回答回数220ベストアンサー獲得回数302007/09/26 23:42:15

ポイント23pt

単純に別ファイルにするには


別ファイルに

my $YOMIKOMI_KAZU = 4;

などと定数を書いておいて、一番最後の行で

1;

を書いておきます。


それを使うプログラム側では最初のほうで

require 'ファイル名';


としておけばOKです。

http://cocohome.hp.infoseek.co.jp/perl_ref/require.html

id:zachouR

ありがとうございます。

これで、便利になります!

2007/09/27 09:27:12
id:cubick No.2

cubick回答回数121ベストアンサー獲得回数352007/09/26 23:46:24

ポイント23pt

別ファイル(ここではhoge.plとします)に定義し、呼び出し側で

require 'hoge.pl';

とすれば定義ファイルの内容を取り込む事が出来ます。


ただし注意点として、定義ファイル(hoge.pl)の最後にかならず、

1;

を記述しておく必要があります。


http://www.rfs.jp/sb/perl/05/require.html

id:zachouR

単純に、requireを使えば解決するんですねー。

ありがとうございます!

2007/09/27 09:27:51
id:tezcello No.3

tezcello回答回数457ベストアンサー獲得回数682007/09/26 23:54:01

ポイント22pt

最近はPHPでやってるのでハズしてるかも知れませんが...


通常ライブラリを使用する時は、package, local などを使って重複を避けていると思いますが、これらを使わなければ全てグローバル変数として扱われませんでしたっけ?

なので、初期値を設定するサブルーチンをもつライブラリを用意して、require してからそのサブルーチンを呼んでやればOKではないでしょうか。


もちろん、チャンと package 宣言して、$パッケージ名::変数名 してやってもいいんですが。

http://q.hatena.ne.jp/1190815879

id:zachouR

PHPでは、HTMLソースの中にとして、よく利用していました。

ありがとうございます。

2007/09/27 09:28:41
id:tkyk3 No.4

tkyk3回答回数59ベストアンサー獲得回数62007/09/27 00:01:08

ポイント22pt
require 'const.pl';

はどうでしょうか。

const.pl(別ファイル)

my $YOMIKOMI_KAZU = 4;
1;

requireは定数だけでなく、サブルーチンをまとめたりするのにも使われます。

但し、サブルーチンが名前の衝突など色々問題が出てきては困ってしまうので、大抵package文を併用することが多いです。

package calc;

sub plus {
    print "calc...";
}
1;
require 'calc.pl';
hoge::calc();

と言っても、今ではuse文を使ってモジュール化したプログラムを扱うことが一般的のようです。

Perl の use と require の違い

http://iandeth.dyndns.org/mt/ian/archives/000592.html

サブルーチン、ライブラリ

http://www.site-cooler.com/kwl/perl/9.htm

id:zachouR

ありがとうございます。

単純に変数をまとめるには、requireがいちばんよさそうですねー。

助かりました。

2007/09/27 09:30:02
  • id:tkyk3
    修正:

    require 'calc.pl';
    calc::plus();

    の間違いでした。すみません。
  • id:b-wind
    余談ですが、定数として宣言するなら constant か Readonly 使いましょう。
    http://d.hatena.ne.jp/minesouta/20070813

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

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

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

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