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逆引き辞典

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「こっ、こしゃくな。
このPerオタクめ~!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!