Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. ファイル操作
  3. here

ファイル名からディレクトリ名とベース名を取り出す

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