パスワードの情報を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);