CGI::Application::Plugin::Config::YAML

ってのを作ってみました。
CGI::Appな環境でYAMLをコンフィグファイルとして扱いやすくしました。
基本CGI::Application::Plugin::Config::Simpleと同じ動作です。

以下ソース


package CGI::Application::Plugin::Config::YAML;
use strict;
use warnings;
use vars qw($VERSION @EXPORT);
use CGI::Application;
use Config::YAML;
$VERSION = '0.01';
@EXPORT = qw(
config_file
config_param
config
);
sub import {
my $pkg = shift;
my $call = caller;
no strict 'refs';
foreach my $sym (@EXPORT) {
*{"${call}::$sym"} = \&{$sym};
}
}
sub config_file {
my $self = shift;
my $file_name = shift;
if ( defined $file_name ) {
$self->{__CONFIG_YAML}->{__FILE_NAME} = $file_name;
$self->{__CONFIG_YAML}->{__FILE_CHANGED} = 1;
}
else {
$file_name = $self->{__CONFIG_YAML}->{__FILE_NAME};
}
if ( ! defined $file_name ) {
$ENV{CGIAPP_CONFIG_FILE} =~ /(.*)/;
$file_name = $1;
}
$file_name;
}
sub config_param {
my $self = shift;
my @params = @_;
my $conf = $self->config();
if ( scalar(@params) == 0 ) {
return;
}
elsif ( scalar(@params) == 1 ) {
return $conf->get($params[0]);
}
else {
my %params = (@params);
$conf->set($_ => $params{$_}) foreach (keys %params);
if ( $conf->write ) {
return;
}
else{
die "Config-Plugin: Could not write to config file (" . $self->config_file . ")! ";
}
}
}
sub config {
my $self = shift;
my $create = !$self->{__CONFIG_YAML}->{__CONFIG_OBJ} || $self->{__CONFIG_SIMPLE}->{__FILE_CHANGED};
if ( $create ) {
my $file_name = $self->config_file or die "No config file specified!";
my $conf;
eval{
$conf = Config::YAML->new(config => $file_name);
};
die "Could not create Config::YAML object for file $file_name! $@" if $@;
$self->{__CONFIG_YAML}->{__CONFIG_OBJ} = $conf;
$self->{__CONFIG_YAML}->{__FILE_CHANGED} = 0;
}
return $self->{__CONFIG_YAML}->{__CONFIG_OBJ};
}
1;

どうでしょうか?
必要ですか?

あとでオブジェクトの持ち方を変えてみます。