• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl、オブジェクト指向での初期設定ファイルについて。 )

Perlオブジェクト指向での初期設定ファイルについて

このQ&Aのポイント
  • Perlオブジェクト指向における初期設定ファイルの作成方法について解説します。
  • 従来のグローバル変数を使った初期設定ファイルの代替手法として、オブジェクト指向のアプローチを紹介します。
  • 例として、config.pmを使用して初期設定情報を管理する方法を説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • an631
  • ベストアンサー率82% (28/34)
回答No.3

>今まで、サーバの絶対パスや、データベースの名称などを、 >config.pl というファイルを作って、グローバル変数で宣言していました。 定数を使いたいのであれば型グロブが良いかと思います。 型グロブを使えばget_local_pathの様なアクセサを使う必要はありません。 >でも、オブジェクト指向では、グローバル変数を使わないようにするということで、 『oop=全てパッケージ化しなくてはいけない』ということでは無いと思いますので、私であれば下記のようにします。 init.pm -------------------------------------------------- *LOCAL_PATH = \"/virtual/aaa/bbb/public_html"; main.cgi -------------------------------------------------- #!/usr/bin/perl require "init.pm"; print "Content-type: text/html;\n\n"; print <<"HTML"; <html> <body> <img src="$main::LOCAL_PATH/images/abc.gif"> </body> </html> HTML exit;

kt_yuka
質問者

お礼

ありがとうございます。 簡単でいいですね。 型グロブに関してもやはり今までなじみが無いので、 使いこんでみようと思います。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

えぇっと.... あなたが何を期待しているのかが今一つ見えないのですが.... とりあえず 「定数だと埋め込めない」というのは, 「文字列中でその値に展開してくれる」ということだと理解しました. 「get_local_path()などを用意しなくてもいいやり方」については何を期待しているのかよくわかりません. また, 初期化の方法とか「プログラム中で随時変更できるのかどうか」あたりも作り方に影響することがありえるので, これもあなたがどう期待しているのか書いてもらえるとありがたいかな. おっと, 「スマートかどうか」の判断基準も欲しいか. ことによっては tie かなぁ (ぼそっ). ちなみに最も頭を使わない方法は package Config; our $local_parh = "/virtual/xxx/bbb/public_html"; our $dbname = "testdb"; our $dbuser = "username"; 1; と「パッケージの中にグローバルな変数を作る」だったりする.

kt_yuka
質問者

お礼

>「定数だと埋め込めない」というのは, 「文字列中でその値に展開してくれる」ということだと理解しました. はい。ご理解いただきありがとうございます。 使い道としては、プログラム中では変更の必要はありません。 定数と考えていいのですが、上記の、展開できないことから変数にしたいだけです。 変更が必要ないので、初期化は最初に行われればOKです。 スマートというあいまいな表現をしてしまってすみません。 今までの使い方としては、前述のpathなどのほか、 $toiawasesaki = 'info@example.com'; @seibetu = ("","男性","女性"); @todoufuken = ("北海道","青森","秋田", …); のような感じです。 簡単なアンケートの項目などもこのように作成していました。 で、このような作り方を多様してるので、一つ一つget_local_path()のような メソッドを作るのがめんどくさいなぁ~、という感じです。 ただ、現時点ではオブジェクト指向の感覚も分かってないし、 もしかしたら他の人はこのくらいは全然気にならないことなのか、 またはもっと楽な書き方があるのかと思って質問させていただきました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「オブジェクト指向では、グローバル変数を使わないようにする」というのも, なんだか的を外しているような気がするけど.... その設定が「読み込んだら変更されることはない」というものであれば, 例えば package Config; { my $local_path = ....; sub get_local_path { $local_path; } } 1; のようにすることもできます. 使う方では use Config; $local_path = Config::get_local_path(); とする. 要は Config の中に隠しているだけですが. もちろんこの方法が「スマート」かどうかは知りません.

kt_yuka
質問者

お礼

ありがとうございます。 今まで良く使う項目をグローバル変数でたくさん定義していたのですが、 get_local_path()などを用意しなくてもいいやり方とかありましたら よろしくお願いいたします。 他のサイトで TestConst.pm use constant HOGE => ’定数値’; a.pl use TestConst; print ’HOGE=’ . TestConst::HOGE; と、定数の例が出てましたが、結構普通の事でしょうか? 定数だと <img src="$local_url/images/abc.gif"> のように埋め込めないのであんまり使いたくないのですが、 そういう問題ではないですか?

関連するQ&A