パスワードの情報をperl内部で使い易いようにして、これを変数に代入しておく。
my $perl_data = {username=>"hoge", password=>"fuga" };
この内容を保存したいjsonファイルのパスを引数から受け取る。
my $json_file = $ARGV[0] || "passwd.json";
パスワードの情報をjsonの形式でパスワードファイルに保存する。
encode_json_file($perl_data, $json_file);
sub encode_json_file {
my $perl_data = shift;
my $json_file = shift;
my $json_data = encode_json($perl_data);
my $fp;
open $fp, '>', $json_file or die $!;
print $fp $json_data;
close $fp;
return;
}
json形式のパスワードファイルから読み込む
$perl_data = decode_json_file($json_file);
sub decode_json_file {
my $json_file = shift;
my $json_data = '';
my $fp;
open $fp, '<', $json_file or die $!;
{
local $/ = undef;
$json_data = <$fp>;
}
close $fp;
$perl_data = decode_json($json_data);
return $perl_data;
}
テストスクリプトは以下のようになる。
#!/usr/bin/perl
use strict;
use warnings;
use JSON;
use Data::Dumper;
my $json_file = $ARGV[0] || "passwd.json";
my $perl_data = {username=>"hoge", password=>"fuga" };
print Dumper $perl_data, $json_file;
encode_json_file($perl_data, $json_file);
print Dumper $perl_data, $json_file;
$perl_data = decode_json_file($json_file);
print Dumper $perl_data, $json_file;
exit;
sub encode_json_file {
my $perl_data = shift;
my $json_file = shift;
my $json_data = encode_json($perl_data);
my $fp;
open $fp, '>', $json_file or die $!;
print $fp $json_data;
close $fp;
return;
}
sub decode_json_file {
my $json_file = shift;
my $json_data = '';
my $fp;
open $fp, '<', $json_file or die $!;
{
local $/ = undef;
$json_data = <$fp>;
}
close $fp;
$perl_data = decode_json($json_data);
return $perl_data;
}
__END__
これをjson_config.plというファイル名で保存して走らせる。
$ perl json_config.pl config.json
$VAR1 = {
'password' => 'fuga',
'username' => 'hoge'
};
$VAR2 = 'config.json';
$VAR1 = {
'password' => 'fuga',
'username' => 'hoge'
};
$VAR2 = 'config.json';
$VAR1 = {
'password' => 'fuga',
'username' => 'hoge'
};
$VAR2 = 'config.json';
上に挙げたテストスクリプトはパスワードを保存する作業を先に行っている。実際に使用する場合は、パスワード読み出し、メイン処理、パスワード保存。という手順になると思う。つまり下のような感じ。
$perl_data = decode_json_file($json_file); main($perl_data); encode_json_file($perl_data, $json_file);