HOME備忘帳

Perl関数リファレンス:ファイル操作関係

これまた自分用メモですが、ファイル操作関係の関数いろいろ。 コピー、削除、名前変更、存在チェック、そのあたり。

ファイルのコピー

組み込みのコピー関数は無い(意外?)。

とはいえ、手動コピー(コピー元ファイルを読み込みオープン、新しいファイルを書き込みオープンして、読む⇒書く)はあまりにも面倒。

システムのコピーを呼び出してもいいけど…

system("cp "filename", "new_filename") == 0 or die "cpコマンド失敗。$?";

標準モジュールのFile::Copyがらくちんだと思う。

use File::Copy;
copy "filename", "new_filename" or die "コピー失敗。$!";

useするときに use File::Copy qw(cp); とやれば、copyと同じ仕事をする関数cpをインポート可。 これでunix系の方々も安心デス。

[ ページ先頭へ ]

ファイル削除

deleteはファイル削除じゃないunlinkを使おう。

unlink "filename";
unlink @filename_list;  # 複数ファイル削除
unlink glob("*.bak");   # 拡張子bakのファイルをすべて削除

ちなみに、deleteはハッシュからキーと値を削除する関数。 もうひとつちなみに、glob関数と型グロブ(*fooとか)は無関係。

ディレクトリ丸ごと削除するなら、File::Pathモジュールをuseすると使えるrmtreeを。

# ./data/tmp/を丸ごと削除
# フォルダ内にあるファイルも、ディレクトリも、ゴッソリ全部。
use File::Path;
rmtree('./data/tmp/');
rmtree([ './data/tmp1', './data/tmp2' ]); # 複数ディレクトリ一気削除

ある意味怖いけど、注意して使えば便利。

[ ページ先頭へ ]

ファイル名の変更

組み込み関数renameがあるよ。

rename "old_filename", "new_filename" or die "リネーム失敗。$!";

あと、標準モジュールFile::Copyをuseすると、move関数も使える。 こっちは別のディレクトリへも移動可。

use File::Copy;
move "old_filename", "new_filename" or die "リネーム失敗。$!";

もちろん、use File::Copy qw(mv)ってのもアリ。 unix系の方々も(以下略)

[ ページ先頭へ ]

ファイルの存在チェック

ファイルテスト演算子で。

if (-e "filename") {
    # ファイルは存在する
}
主なファイルテスト演算子
-e ファイルが存在すれば真
-s ファイルサイズが0でなければ真
-f 普通のファイル(ディレクトリとかシンボリックリンクじゃない)なら真
-T テキストファイルなら真
-d ディレクトリなら真

[ ページ先頭へ ]

ディレクトリの作成

普通にmkdirしてもいいんだけど、File::Pathのmkpathは便利。 2階層以上深いディレクトリを、途中のディレクトリの有無を気にせずに一気に作れる。

use File::Path; # mkpath と rmtree がインポートされる

# fooやfoo/baaがまだ無いときは、勝手に作ってくれる。
mkpath('./foo/baa/tmp');
mkpath(['./foo/baa/tmp1', './foo/baa/tmp2']);

最終更新日:2008/08/21

[ ページ先頭へ ]