Translate

2013年8月16日金曜日

リファレンス+do

ただ読み込むだけのもっとも簡単な設定ファイルの仕組みが欲しいのであれば
ファイルに直接リファレンスを書き込みそれをdoしてperlとして解釈するのが一番簡単。

まずは設定ファイルを作成する
ファイル名:config
database = 'fizz'
user     = 'bazz'
pass     = 'fizzbazz'

ファイル名:Sample.pl
use strict;
use warnings;
use utf8;  
use feature 'say';
binmode STDOUT, ":utf8";
use Dumpvalue; my $d = Dumpvalue->new();

my $configFile = 'config';
my $config = do $configFile or die "$!";

say $config->{database};
say $config->{user};
say $config->{pass};

$d->dumpValue($config);

実行結果:
fizz
bazz
fizzbazz
'database' => 'fizz'
'pass' => 'fizzbazz'
'user' => 'bazz'

個人でさくっと読み込みのみの気軽な物が・・・
となるとこれが一番ですかね。

Config::Simple

■簡単な設定ファイルを操作するモジュール

まずは設定ファイルを作成する
ファイル名:config
database = 'fizz'
user     = 'bazz'
pass     = 'fizzbazz'

ファイル名:Sample.pl
use strict;
use warnings;
use utf8;
use feature 'say';
use Config::Simple;
binmode STDOUT, ":utf8";

my $config = Config::Simple->new('./config');
say $config->param('database');
say $config->param('user');
say $config->param('pass'); 

実行結果:
fizz
bazz
fizzbazz

new する時に、ファイルパスを指定し、その後paramメソッドで値を取得することができるようです


ちょっとした物を記録しておき使うのであればこんな感じでよさそうですね。
ただ、同一のキー名を使用したい場合はセクションで区切ることで使い分けができます。
ファイル名:config
[001]
database = 'db001'
user     = 'user001'
pass     = 'pass001'

[002]
database = 'db002'
user     = 'user002'
pass     = 'pass002'

use strict;
use warnings;
use utf8;
use feature 'say';
use Config::Simple;
binmode STDOUT, ":utf8";

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

say $config->param("001.database");
say $config->param("002.database");

実行結果:
db001
db002

今度は、paramメソッドで[セクション名].[キー名]を指定することで値にアクセスできます。

ちなみに、ハッシュ化することも可能で
オブジェクト->vars(); とすればできます。
use strict;
use warnings;
use utf8;  
use feature 'say';
use Config::Simple;
binmode STDOUT, ":utf8";
use Dumpvalue; my $d = Dumpvalue->new();

my $config = Config::Simple->new('./config01');
my $hash   = $config->vars();
$d->dumpValue($hash);

say $hash->{'001.user'};                                                           
say $hash->{'002.user'};

実行結果:
'001.database' => 'db001'
'001.pass' => 'pass001'
'001.user' => 'user001'
'002.database' => 'db002'
'002.pass' => 'pass002'
'002.user' => 'user002'
user001
user002


param関数とかじゃなくて、一発でハッシュに放り込んでくれると便利そうですね。
ということで他のConfig系のモジュールも探してみよう。

2013年8月14日水曜日

perlの変更点が知りたい時

perldoc.jpに翻訳されたものがあるのでそちらを見るとよいと思います。

自分もあれって何のバージョンから変更されたっけ??
となるので、たまに参照します。
ということで、おもだったとこのリンクでもはっておきます。

perl v5.18.0 での変更点
→5.16.0 リリースと 5.18.0 リリースの変更点

perl v5.16.0 での変更点
→5.14.0 リリースと 5.16.0 リリースの変更点

perl v5.14.0 での変更点
→5.12.0 リリースと 5.14.0 リリースの変更点

perl v5.12.0 での変更点
→5.10.0 リリースと 5.12.0 リリースの変更点

perl 5.10.0 での変更点
→5.8.8 リリースと 5.10.0 リリースとでの相異点


ラクダ本や、リャマ本を読んでようやく、スタートラインにたち、
ネットから最新情報を取得してがんばろう!
とした矢先に あれ?この記述なんだ??
みたいなことはよくあるものですよね。
おまけに、ググラビリティが低くて見つかりにくいのです…
そんなわけで、気になったものを簡単に羅列してみます。

■+{} 波括弧の前のプラス
波括弧には、
関数を囲うためとハッシュのリファレンスの2通り使われるため
perlにこれはハッシュのリファレンスのための波括弧なんですよ。
ってことを知らせるために、+{}としている

■use 5.010; or use feature ':5.10'; or use feature 'say'

print "値¥n";
とした場合、いちいち改行文字なんぞくっつけていたと思いますが
say "値";
say関数であれば、改行文字を自動的にくっつけてくれる便利さんなんです。
という話をどこかでみかけたと思います。
そして、say関数を使うにはどうすればよいの?
とあちこち眺めてみると上記の記述にでくわすわけです。

use feature 'say';
は、5.10で追加になったsayという関数のみ使えるようにする記述の仕方

use feature ':5.10';
は、5.10で追加になった機能すべて使えるようにする記述

use 5.0.10;
は、5.10で追加になった機能すべて使えるようにして
かつそれ未満のバージョンのperlで実行しようとしたらすぐにエラーとなり停止させれます。

つまり、明示的にsayって関数だけがつかいたいだけなんですよ!!
他、あるかしらんしー
sayだけあれば幸せだしー
という場合は、use feature 'say';
とかけば、他の人が読んでも 他のものはつかっていないことがはっきりします。

ただ、5.12以降を指定すると use strictしたのと同等になり
いちいちuse strict; と書かなくてすむので
use 5.0.12; のように記述するのを好む人もいると思います。

という感じですかね。