Perlでのファイル処理について

Perl初心者のためのPerlノートです!

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo

◆ はじめに

本ページは、私がPerlを習得した時(いや習得中)のノートです。

ごく普通の言語(COBOL,C,Java,VB等)を知っている人が、Perlをやり始めるといろいろと悩むことがあります。

それは、

です。

本ページは、そのようなハードルを一つ一つクリアにしていけたらと思います。

そして、本ページが何かのお役に立てれば幸いです。では、ごゆっくりご覧ください。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

◆ サイト最新情報

◆ コンテンツ

2009-11-14 Perlでのファイル処理について

Perlでのファイル処理は、以下の感じです。


◆組み込み関数によるオープン・リード・ライト・クローズ

すごく良い記事があったので引用させて頂きます(^^;

ファイルハンドルにはレキシカル変数を使うこと (本当に特別な用途がない限りは必須)

 ファイルハンドルには宣言したばかりのレキシカル変数を使います。レキシカル変数を宣言してそれをopen関数の第1引数に指定するとレキシカル変数にファイルハンドルが設定されます。

# レキシカル変数
my $fh;
my $file = 'file1';

open $fh, '<', $file
  or die "Cannot open '$file': $!";

while (my $lien = <$fh>) {
    # 行の読み込み
}

 レキシカル変数はスコープを持つということと他の関数に引数として渡すことができるという大きな利点があります。古い解説にあるようなFHや*FHなどのシンボルを使わないようにします。

 またレキシカル変数の宣言をopen関数の中にまとめてしまうのがより現代的であるといえるでしょう。

open my $fh, '<', $file

3引数のopen関数を使う (必須)

 3引数のopen関数を使用するようにします。

open my $fh, '<', $file

 古い解説では2引数のopen関数を解説しているものがありますが使わないようにしましょう。2引数のopen関数はセキュリティ的に脆いので使用してはいけません。

open my $fh, "< $file"; # 2引数のopen関数を使用してはいけない

ファイルオープン時のエラー処理を行う (必須)

 ファイルオープンを行ったときは必ずエラー処理を行うようにします。

open my $fh, '<', $file
  or die "Cannot open '$file': $!";

 open関数は失敗するとundefを返すのでorを使ってエラー処理を行います。$!にはOSが返したエラーメッセージが含まれているのでユーザに見せるエラーメッセージに含めるようにします。

 プログラムをエラーメッセージを表示して終了させるにはdie関数を使用します。他のプログラムから見た場合は終了コードは255になります。

 ファイルオープンに限らずプログラムの外部と通信する場合はかならずエラー処理を行うようにします。外部というのはメモリの操作を除くすべてです。ファイルやネットワークなどが外部になります。

http://d.hatena.ne.jp/perlcodesample/20091120/1246679588

尚、openの第二引数には以下があります。


・参考リンク
http://blog.livedoor.jp/dankogai/archives/51176081.html

◆FileHandleモジュールによるオープン・リード・ライト・クローズ

以下を参照願います。


◆ファイルテスト演算子によるファイル存在チェックやファイルサイズの取得等

以下を参照願います。


◆ファイル操作関数によるファイル削除や名前変更等
・ファイル削除のunlink

unlink 'ファイル名1', 'ファイル名2', ……;

my $c = unlink 'zzz.txt', 'yyy.txt';
print "-->$c<--\n";

引数には、削除するファイル名のリストを指定します。

戻り値は削除したファイルの数が返ります。


・名前変更のrename

rename '古いファイル名', '新しいファイル名';

if (rename 'xxx.txt', 'zzz.txt') {
    print "真\n";
}
else {
    print "偽\n";
}

戻り値は、リネーム成功時に真、それ以外は偽。


・その他のファイル操作関数

◆ おすすめ Perl本

■ 続・初めてのPerl 改訂版

『初めてのPerl』の次ぎに読むと吉です。

結構いいですが・・・、初心者にはちょっと難しいかもです。

■ 結城浩のPerlクイズ

この本には、ちゃいちゃんパパの小話しが載っています(謎)。

ある程度、Perlを理解している人には、たまらない内容になっています。さすが結城先生だな!

結城浩のPerlクイズ

■ 新版Perl言語プログラミングレッスン入門編

実は、私はまだ読んでいませんが、結城先生の本なので良くないはずがありません。

新版Perl言語プログラミングレッスン入門編

■ CGI&Perlポケットリファレンス (Pocket reference)

この本は、非常に役に立ちます。ちょっと調べるのに最適です。サンプルも説明も的を射ています。

CGI&Perlポケットリファレンス (Pocket reference)

■ Perlベストプラクティス

一読の価値有りだと思います。

Perlベストプラクティス

■ プログラミングPerl〈VOLUME1〉

ご存知、Perl本の聖書、ラクダ本(上)です。

■ プログラミングPerl〈VOLUME2〉

ご存知、Perl本の聖書、ラクダ本(下)です。

◆ おわりに

最後に、本ページが、何かのお役に立てれば幸いです。

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくPerlノート掲示板へご指摘ください。

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ WEBリーダー/ 燈明日記/ yahoo