m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Perlでファイルを読み込むモジュールを作成

サンプルモジュール作成

簡単にファイルのデータを読み込み、書き込みを行うモジュールを作成

サンプルデータ

data.txt
1234567890lskajdljlasklioweoiadllkkjlkds9437029840921849dskjlsdf
s
s




sssssssssssssss

ddddddddd

eeeeeeeeeeeeeeeeee

33333333333333

444444

ソースコード

lib/File.pm
# パッケージ
package File{
    use Mouse;

    # ファイルに追加
    use constant FILE_APPEND => "1";
    use constant FILE_DATA => "0";

    # ファイルを読み込み結果を返却
    sub read{
        # パラメータ取得
        my ($file) = @_;
        my $data = "";

        # ファイルを開く
        open(READFILE, "< ", $file)
                or return "";

        # データを読み込み
        while(my $line = <READFILE>){
                $data .= $line;
        }

        # ファイルを閉じる
        close(READFILE);

        # 結果出力
        chomp($data);
        return $data;
    }

    # ファイルを書き込み
    sub write{
        # パラメータを取得
        my ($file, $data, $mode) = @_;
        my $write_mode;

        # 未定義の場合は初期値を設定
        $mode = FILE_DATA unless defined $mode;

        if($mode eq FILE_APPEND){
            $write_mode = ">>";
        }else{
            $write_mode = ">";
        }

        # ファイルを書き込みで開く
        open(WRITEFILE, $write_mode, $file)
            or return 0;

        # ファイルを書き込む
        print WRITEFILE $data;

        # ファイルを閉じる
        close(WRITEFILE);

        # 戻る
        return 1;
    }

    # おまじない2
    __PACKAGE__->meta->make_immutable();
}

# おまじない
1;

※「use constant」を使用することでクラス定数として使用
※読み込み、書き込みともにデータの全アクセスを行うが、書き込みは上書きと追加できるようにした。

実行用サンプルモジュール
#!/usr/bin/env perl

use strict;
use warnings;

use lib 'lib';

# モジュール
use File;

# ファイルを読み込み出力
print "読み込みして出力\n";
my $file = "data.txt";
print File::read($file);

# ファイルを書き込み
print "新規に書き込み\n";
my $file2 = "data2.txt";
File::write($file2, "da;kla;aadaskdjaldakjdla");
print "\n";

# ファイルを追加書き込み
print "追加書き込み\n";
my $data2 = "\n\n\n";
$data2 .= "xxxxxxxxxxxxxxxxxxx";
File::write($file2, $data2, File::FILE_APPEND);

# 再表示
print "書き込んだデータを表示\n";
print File::read($file2);
結果
[root@localhost pm_sample3]# perl sample.pl
読み込みして出力
1234567890lskajdljlasklioweoiadllkkjlkds9437029840921849dskjlsdf
s
s




sssssssssssssss

ddddddddd

eeeeeeeeeeeeeeeeee

33333333333333

444444新規に書き込み

追加書き込み
書き込んだデータを表示
da;kla;aadaskdjaldakjdla


xxxxxxxxxxxxxxxxxxx[root@localhost pm_sample3]#

まとめ

ファイル読み書きはfopenかな~?と思いつつ、openだった。覚えないと記号を間違いやすいので注意する必要があるが難しくはなさそう。
utf8などの文字コードで問題が発生しそうなので注意する必要がありそう。