綾小路龍之介の素人思考

[perl] JSONを使ってパスワード等の情報とコードを分離する

自分だけで使うコードの場合はいいのだけれど、コードを公開する場合にはどうにかして隠匿したい情報とコードを分離しないといけない。

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

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-02-10T16:36:11+09:00
  2. Modified: 2009-02-10T16:36:11+09:00
  3. Generated: 2017-11-23T23:09:17+09:00