File::Basename モジュールの fileparse 関数を使う。
use strict; use warnings; use File::Basename qw/ fileparse /; my $file = shift @ARGV; (my $base, my $dir, my $ext) = fileparse($file, qr/\..+$/); print "dir: $dir\n"; print "base: $base\n"; print "ext: $ext\n";
fileparse の返り値の順番が、ファイル名、ディレクトリ名、拡張子であることに注意。ふつうディレクトリ名が最初だと思うよなぁ。
実行結果:
^o^ > perl fileparse.pl sample.txt dir: .\ base: sample ext: .txt