Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. モジュール
  3. here

File::Basename - ファイルのベース名を取得

File::Basenameはファイル名からベース名やディレクトリ名を取得するためのモジュールです。次の3つの関数を使用することができます。

  • basename - ファイルのベース名の取得
  • dirname - ディレクトリ名の取得
  • fileparse - もう少し細かな操作

これらの関数を使用するには関数を明示的にインポートするのがよいでしょう。

# 関数のインポート
use File::Basename 'basename', 'dirname';

ファイルのベース名を取得するにはbasenameを使用します。ベース名というのはファイル名の中の末尾の部分です。

# ベース名の取得
$basename = basename $file;

ディレクトリ名を取得するにはdirnameを使用します。

# ディレクトリ名の取得
$dirname = dirname $file;

basenameとdirnameのサンプルです。ファイル名が「dir/a.txt」の場合はbasenameで「a.txt」を、dirnameで「dir」を取得することができます。

# ベース名とディレクトリ名を取得
use File::Basename qw/basename dirname/;
my $file = 'dir/a.txt';
my $basename = basename $file;
my $dirname = dirname $file;

ファイル名に対するもう少し細かな操作

fileparseを使用するとベース名とディレクトリ名を一度に取得することができます。

# ベース名とディレクトリ名の取得
($basename, $dirname) = fileparse $file;

またfileparseの第二引数に拡張子を正規表現で指定すると拡張子とベース名を分けて取り出すことができます。

# ベース名、ディレクトリ名、拡張子を取得
($basename, $dirname, $ext) = fileparse($file, $regex);

拡張子を取り出すサンプルです。第二引数には正規表現を指定します。正規表現「\..*$」は「.がきて何でもよい文字が0個以上続いて終わる」という意味になります。$fileが「dir/a.txt」の場合は$basenameは「a」に、$extは「.txt」になります。

# 拡張子を取り出す
use File::Basename 'fileparse';
my $file = 'dir/a.txt';
my ($basename, $dirname, $ext) = fileparse($file, qr/\..*$/);

上記は拡張子を取り出す例ですが、拡張子がふたつ続いた場合は先頭の拡張子以降が取り出されます。たとえばファイル名が「dir/a.txt.gz」であった場合は、$extは「.txt.gz」になります。

「.gz」を取り出したい場合は正規表現を「\.[^\.]*$」に変更します。この正規表現の意味は「.がきて.以外の文字が0個以上続いて終わる」という意味になります。

Qiitaで
「3分間Perlテキストクッキング」
という連載を始めました。
テキスト処理を題材にして、3分くらいで読める分量で、書いていきます。
文字コード、テキストデータ、コンピュータにおけるテキストの扱いなど、ソフトウェアの基礎の話題も
3分間Perlテキストクッキング