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
[ ページ先頭へ ]