ファイル名からディレクトリ名とベース名を取り出す
ファイル名から、ディレクトリ名とベース名を取り出すには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
Perlゼミ

