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