oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

ちゃんとconfigファイルを作らないと死ねる→PerlならConfig::Simpleで生きていける

[追記]
ちょっとconfigの記述に間違い見つけたので修正。


しょぼいメモです。

「しょぼいバッチ処理だからDB接続用のパラメータとか適当に書いておくか( ´ー`)y-~」

「こういう処理も足しておくか(´∀`)」「段々長くなってきたからpmファイルで分割するか(`・ω・)」
→何度か繰り返す


気づいたら全部で使う設定値を色んなファイルに書いている><
という事は僕みたいな底辺だと良くやる訳ですよ。で、configファイル作らなきゃってやろうとしたんですが、
ばばーって

our $database = "hogehoge";
our $user     = "fugafuga";
our $pass     = "mogamoga";

って書いてrequireで読み込もうとしたりで良いかな?って思ったんですけど、なんかグローバル変数とか使うのやじゃないですか。
なんか使ったら「プークスクス」ってされそうで。変数スコープもグローバルとか混ざると僕は忘れちゃってぐちゃぐちゃになりそうだし。


で、やっぱもっと良い方法無いのかなーってまたCPANモジュール様を探してみた所、
Config::Simpleという素晴らしいのがあるじゃないですか。
以下、ほぼこちらのコピーです。


で、configファイル(config.pm)を

[config]
database = 'hogehoge'
user     = 'fugafuga'
pass     = 'mogamoga'

と書いて、この値を利用するスクリプト側は

#!/usr/bin/perl

use strict;
use warnings;

use Config::Simple;

my $config = new Config::Simple('./config.pm');
my $cfg = $config->vars();

#個別に代入
my $database = $cfg->{'config.database'};
my $user     = $cfg->{'config.user'};
my $pass     = $cfg->{'config.pass'};

print "$database\n";
print "$user\n";
print "$pass\n";

#ハッシュにしてみる
my %hash =  $config->vars();
foreach my $key ( keys %hash ) {
    print "key:$key : value:$hash{$key}", "\n";
}
#実行結果
hogehoge
fugafuga
mogamoga
key:config.database : value:hogehoge
key:config.user : value:fugafuga
key:config.pass : value:mogamoga

という形でアクセスして、見事に値が取得出来ました。
コード読んでも実行するスクリプト内で宣言出来るので分かりやすいですね。
これで、AWS内でDB接続のように、「インスタンス止める→起動」でDB側の内部アクセス用DNSが変更されて
頻繁にconfig書き換えが発生するような時でも、一部スクリプトの更新忘れとかが無くなりますね!


正直まだ全然使いこなしていないので、リファレンス読んでちゃんと覚えます。