パス(文字列の一部である場合)および拡張子のないファイル名を取得したい。
例えば:
/path/to/file/fileName.txt # results in "fileName"
fileName.txt # results in "fileName"
/path/to/file/file.with.periods.txt # results in "file.with.periods"
したがって、基本的には、前の「/」(存在する場合)と最後の「。」を含めて、前のものをすべて削除したいです。それ以降のメタ文字とともに。
このような初心者の質問には申し訳ありませんが、私はPerlを初めて使います。
フルパスを指定して移植可能なファイルのベース名を取得するには、 File::Basename
モジュール。コアの一部です。
ファイル拡張子のヒューリスティックを行うには、次のような正規表現を使用します
(my $without_extension = $basename) =~ s/\.[^.]+$//;
他の人は答えましたが、raflの答えごとにベース名について少し読んだ後:
($file,$dir,$ext) = fileparse($fullname, qr/\.[^.]*/);
# dir="/usr/local/src/" file="Perl-5.6.1.tar" ext=".gz"
一行で問題を解決するようです。
他のソリューションとは対照的に、これに関連する問題はありますか?
パス区切り記号が'/'
、 substitutions のペアでそれを行うことができます:
$name =~ s{^.*/}{}; # remove the leading path
$name =~ s{\.[^.]+$}{}; # remove the extension
それを単一の置換として書くこともできます:
$name =~ s{^.*/|\.[^.]+$}{}g;