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などの文字コードで問題が発生しそうなので注意する必要がありそう。