« Perl - ログファイル出力のサンプル | トップページ | Perl - 全角カナ⇔半角カナ 変換のサンプル »

2012/05/22

Perl - base64形式(エンコード/デコード)のサンプル

ファイル処理でエラーが出た場合、ログ出力するようにしている。
ログ出力は、先ほどの「Perl - ログファイル出力のサンプル」を利用しているので、ライブラリファイルにログ出力のサブルーチンを追加しておく。
エンコードまたはデコードのテストサンプルで、エンコード時の出力ファイル(デコード時は入力ファイル)で改行の有無を設定できる。
#------------------------------------------------
# base64形式(エンコード/デコード)のサンプル
#------------------------------------------------

use strict;              # 不適切な構文の使用を制限するプラグマ
use warnings;            # 不適切な構文を警告するプラグマ

use MIME::Base64 qw(encode_base64 decode_base64);

require("lib_file.pl");  # ライブラリファイル取り込み

#------------------------
# サブルーチン宣言
#------------------------
sub test_encode();
sub test_decode();
sub base64_encode($);
sub base64_decode($);

# テスト実行
test_encode();
test_decode();

#-----------------------------
# エンコードのテストサンプル(MIME)
# プレーンテキスト -> base64
#-----------------------------
sub test_encode()
{
    my $in_file;
    my $out_file;
    my $in_fh;
    my $out_fh;
    my $read_data;
    my $encode_data;

    $in_file  = 'data.txt';         # プレーンテキスト
    $out_file = 'data_encode.txt';  # エンコード後出力ファイル

    # プレーンテキストオープン
    if( !open($in_fh, '<', $in_file))
    {
        logout("perl_log", qq/Can't open file "$in_file": $!/);
        exit(-1);
    }

    # エンコード後出力ファイルオープン
    if( !open($out_fh, '>', $out_file))
    {
        logout("perl_log", qq/Can't open file "$out_file": $!/);
        exit(-1);
    }

    # プレーンテキストを57バイトづつ読出しエンコード出力する
    while( read($in_fh, $read_data, 57) )
    {
        # base64形式にエンコード
        $encode_data = base64_encode($read_data);

        # エンコード後出力ファイルに出力する
        print($out_fh $encode_data, "\n");   # (1)改行コード有
#       print($out_fh $encode_data);         # (2)改行コードなし

    }

    # オープンしたファイルをクローズ
    close($in_fh);
    close($out_fh);
}

#-----------------------------
# デコードのテストサンプル(MIME)
# base64 -> プレーンテキスト
#-----------------------------
sub test_decode()
{
    my $in_file;
    my $out_file;
    my $in_fh;
    my $out_fh;
    my $read_data;
    my $decode_data;

    $in_file  = 'data_encode.txt';  # デコード(base64)入力ファイル
    $out_file = 'data_decode.txt';  # デコード後出力ファイル

    # デコード(base64)入力ファイルオープン
    if( !open($in_fh, '<', $in_file))
    {
        logout("perl_log", qq/Can't open file "$in_file": $!/);
        exit(-1);
    }

    # デコード後出力ファイルオープン
    if( !open($out_fh, '>', $out_file))
    {
        logout("perl_log", qq/Can't open file "$out_file": $!/);
        exit(-1);
    }

    while( $read_data = <$in_fh> )          # (1)改行コード有
#   while( read($in_fh, $read_data, 76) )   # (2)改行コードなし

    {
        # base64形式のデータをデコード
        $decode_data = base64_decode($read_data);

        # デコード後出力ファイルに出力する
        print($out_fh $decode_data);
    }

    # オープンしたファイルをクローズ
    close($in_fh);
    close($out_fh);
}

#------------------------------------------------
# base64形式にエンコード
#------------------------------------------------
sub base64_encode($)
{
    my $indata;
    my $b64_data;

    # エンコードするデータを取得
    $indata = shift;

    # base64にエンコードする
    # エンコード後に付加される改行は削除する(呼出元で改行処理する)
    $b64_data = encode_base64($indata, '');

        # 第2引数を指定しない場合改行が付加される
        # 第2引数省略時のデフォルトは改行である

    # エンコードしたデータを返却
    return($b64_data);
}

#------------------------------------------------
# base64形式のデータをデコード
#------------------------------------------------
sub base64_decode($)
{
    my $indata;
    my $data;

    # デコードするデータを取得
    $indata = shift;

    # base64からデコードする
    $data = decode_base64($indata);

    # デコードしたデータを返却
    return($data);
}

#------------------------------------------------
# END
#------------------------------------------------

« Perl - ログファイル出力のサンプル | トップページ | Perl - 全角カナ⇔半角カナ 変換のサンプル »

Perl実用プログラムサンプル」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Perl - base64形式(エンコード/デコード)のサンプル:

« Perl - ログファイル出力のサンプル | トップページ | Perl - 全角カナ⇔半角カナ 変換のサンプル »