ファイル名からディレクトリ名とベース名を取り出す
ファイル名から、ディレクトリ名とベース名を取り出すにはFile::Basenameモジュールのfileparseメソッドを使用します。
use File::Basename 'fileparse'; my ($base_name, $dir) = fileparse $file;
File::Basename モジュールの fileparse関数を使えば、ファイル名を、ディレクトリ名とベース名を分けることができます。戻り値のリストの0番目がベース名、1番目がディレクトリ名で、元の順序と逆なので、注意してください。
File::Basename は、OSに依存しないように作成されています。Unix,Windows,MacOS では、ファイルの区切り文字が異なりますが、問題なく利用できます。
サンプル
ファイル名からディレクトリ名とベース名を取り出すサンプルです。use strict; use warnings; # ファイル名からディレクトリ名とベース名を取り出す use File::Basename 'fileparse'; my $file_unix = 'dir1/dir2/base_name.txt'; my $file_win = 'dir1\\dir2\\base_name.txt'; print "1: ファイル名から、ディレクトリ名とベース名を取り出す。\n"; my ($base_name, $dir) = fileparse $file_unix; print "Unixの場合\n" . "\$dir = $dir\n" . "\$base_name = $base_name\n\n"; ($base_name, $dir) = fileparse $file_win; print "Windowsの場合\n" . "\$dir = $dir\n" . "\$base_name = $base_name\n\n"; print "2: ベース名だけ取り出す。\n"; # 配列スライスで,リストの0番目だけを抜き出します。 my $base_name_only = (fileparse $file_unix)[0]; print "\$base_name_only = $base_name_only\n\n";
実行結果
1: ファイル名から、ディレクトリ名とベース名を取り出す。 Unixの場合 $dir = dir1/dir2/ $base_name = base_name.txt Windowsの場合 $dir = dir1\dir2\ $base_name = base_name.txt 2: ベース名だけ取り出す。 $base_name_only = base_name.txt