ファイル名から拡張子を取り出す
ファイル名から、拡張子を取り出すには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