- ベストアンサー
CGI/Perl を作成しています。 質問です。
リストファイルから、検索対象ファイルを読み取る 結果を表示する。 というようにしています。 結果表示で、たとえば、「答えてねっと」という語が、 「oshiete_goo.html」というファイルでヒットした場合、 結果を、 “ タイトル名 (oshiete_goo.html) ” というように表示させています。そこで質問です。 この結果表示の、括弧内にファイル名を拡張子付きで表示させて いるのですが、(パラメータ:$fi) それを、拡張子をとって、「oshiete_goo」だけを表示したいのですが、 どのようにしたらいいでしょうか。 記述するスクリプトを教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> ファイル名の拡張子を省いたモノを、 > 別の変数、$fi_sec に渡すようにするにはどうしたらいいでしょうか? 別の変数に渡す必要があるのですか? $fi =~ s/(.*)\.(.*)$/$1/; で、既に$fiはファイル名の拡張子が省かれて、ファイル名だけになっていますが・・・。 だから、普通に$fiを使ってもいいですし、変数名を変えたいなら、 $fi_sec = $fi; でいいですよ。 拡張子がついたままの変数も後で使いたいので残す、というのであれば、 $fi_sec = $fi; $fi_sec =~ s/(.*)\.(.*)$/$1/; とするのがいいでしょうね。 $fiが拡張子を含めたファイル名、 $fi_secが拡張子を除いたファイル名のみのもの、 ということになります。
その他の回答 (4)
- leaz024
- ベストアンサー率75% (398/526)
こんな書き方もできます。 ($fi_sec = $fi) =~ s/\..+$//;
- daibutsuda
- ベストアンサー率34% (268/780)
#3です。 すみません、#3で書いたのは文字列が$_に入っている場合でした。$fiに入っている場合であれば: ($fi_sec) = ($fi =~ m/^([^\.]*)\..*$/); と書けます。
- daibutsuda
- ベストアンサー率34% (268/780)
$fiを非破壊で、と言うことですよね。 だったら、m演算子と配列マッピングを使って ($fi_sec) = m/^([^\.]*)\..*$/; とかくのが綺麗かもしれません。 あと、正規表現を使うとマッチしなかった場合ヌル値が帰ってきてしまいますので、 $fi_sec = $fi if ($fi_sec eq ""); をあとにつけておいたほうがいいかもしれません。
- faith_faithful
- ベストアンサー率51% (14/27)
$fi =~ s/(.*)\.(.*)$/$1/; ではダメでしょうか。
補足
ご回答ありがとうございます。 その、ファイル名の拡張子を省いたモノを、 別の変数、$fi_sec に渡すようにするにはどうしたらいいでしょうか?