Perl入門ゼミ

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

ファイル名から拡張子を取り出す

ファイル名から、拡張子を取り出すにはFile::Basenameモジュールのfileparseの第二引数で拡張子を指定します。戻り値の三つ目で、拡張子が得られます。

use File::Basename;
my ($base_name, $dir, $suffix) = fileparse($file_txt, '.txt');

File::Basename モジュールの fileparse 関数の第2引数に、拡張子名を指定することで、拡張子を取り出すことができます。

正規表現を使って、拡張子のパターンを指定することもできます。

use File::Basename;
my $regex_suffix = qr/\.[^\.]+$/;
my $suffix_txt = ( fileparse( $file_txt, $regex_suffix ) )[2];

この正規表現は一番最後に出現する . より後ろの拡張子を取り出すものです。一番最初に現れる . より後ろの拡張子でをマッチさせたい場合は、「 qw(\..+$) 」という正規表現を使います。

サンプル

ファイル名から拡張子を取り出すサンプルです。

use strict;
use warnings;
use File::Basename 'fileparse';

# ファイル名から、拡張子を取り出す。
my $file_txt = 'dir1/dir2/base_name.txt';
my $file_log = 'dir1/dir2/base_name.log';
my $file_bak = 'dir1/dir2/base_name.log.bak';

print "1: ファイル名から、拡張子を取り出す。( 拡張子名を指定 )\n";
my ($base_name, $dir, $suffix) = fileparse($file_txt, '.txt');
print "\$dir = $dir\n",
  "\$base_name = $base_name\n",
  "\$suffix = $suffix\n\n";

print "2: ファイル名から、拡張子を取り出す。( 拡張子名のパターンを指定 )\n";
my $regex_suffix = qr/\.[^\.]+$/;

my $suffix_txt = (fileparse $file_txt, $regex_suffix)[2];
my $suffix_log = (fileparse $file_log, $regex_suffix)[2];
my $suffix_bak = (fileparse $file_bak, $regex_suffix)[2];

print "\$suffix_txt = $suffix_txt\n",
  "\$suffix_log = $suffix_log\n",
  "\$suffix_bak = $suffix_bak\n";

実行結果

1: ファイルを作成する。
C:\Users\kimoto\labo>perl a.pl
1: ファイル名から、拡張子を取り出す。( 拡張子名を指定 )
$dir = dir1/dir2/
$base_name = base_name
$suffix = .txt

2: ファイル名から、拡張子を取り出す。( 拡張子名のパターンを指定 )
$suffix_txt = .txt
$suffix_log = .log
$suffix_bak = .bak