R.A. Epigonos et al.

[perl] mkpathとdirnameを使って安直にrename

perlのrename関数は新しいファイルの置かれるディレクトリが無いと失敗する。正しい挙動だが、安直にAからBへの移動をしたいときにはエラートラップが面倒。そのときはmkpathとdirmaneを使う。

dirnameはFile::Basenameモジュール、mkpathはFile::Pathモジュールに含まれるのでこれらのモジュールを読み込んでおく。dirnameでファイルパスのディレクトリ部分を切り出し、mkpathで再帰的に多階層ディレクトリを作っている。

#!/usr/bin/perl
use strict;
use warinigs;
use File::Basename;
use File::Path;

my $filename = '/path/to/old/file';
my $filename_new = '/path/to/new/file';
eval {
        mkpath(dirname($filename_new));
};
die "ERROR:mkpath, $@" if $@;
rename $filename, $filename_new;

/path/to/newが存在しているときは毎回作ろうとするけど、存在していればエラーにならない。mkpath呼び出す前にファイルテスト演算子で存在チェックしたほうがいいのかな?

リファレンス

  1. File::Basename - perldoc.perl.org
  2. File::Path - perldoc.perl.org
  3. Perl - ファイルパスの解析
  4. ディレクトリ名の取得
  5. perl dirname - Google 検索
  6. mkpath dirname perl - Google 検索
  7. 6.11.4 Creating and Removing Directories: File::Path Module | On Perl
  8. Perl Circus - Perl Tricks, Tips And Traps.
  9. 複数階層のディレクトリを作成する File::Path::mkpath() - サンプルコードによるPerl入門
  10. mkdir関数とmkpath関数 - 燈明日記
  11. ディレクトリの作成
  12. mkpath perl - Google 検索
  13. ファイルテスト perl - Google 検索

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-09-18T07:23:42+09:00
  2. Modified: 2009-09-18T07:23:42+09:00
  3. Generated: 2023-08-27T23:09:14+09:00