• ベストアンサー

CGI/Perl を作成しています。 質問です。

リストファイルから、検索対象ファイルを読み取る 結果を表示する。 というようにしています。 結果表示で、たとえば、「答えてねっと」という語が、 「oshiete_goo.html」というファイルでヒットした場合、 結果を、 “ タイトル名 (oshiete_goo.html) ” というように表示させています。そこで質問です。 この結果表示の、括弧内にファイル名を拡張子付きで表示させて いるのですが、(パラメータ:$fi) それを、拡張子をとって、「oshiete_goo」だけを表示したいのですが、 どのようにしたらいいでしょうか。 記述するスクリプトを教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> ファイル名の拡張子を省いたモノを、 > 別の変数、$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)
回答No.5

こんな書き方もできます。 ($fi_sec = $fi) =~ s/\..+$//;

回答No.4

#3です。 すみません、#3で書いたのは文字列が$_に入っている場合でした。$fiに入っている場合であれば: ($fi_sec) = ($fi =~ m/^([^\.]*)\..*$/); と書けます。

回答No.3

$fiを非破壊で、と言うことですよね。 だったら、m演算子と配列マッピングを使って ($fi_sec) = m/^([^\.]*)\..*$/; とかくのが綺麗かもしれません。 あと、正規表現を使うとマッチしなかった場合ヌル値が帰ってきてしまいますので、 $fi_sec = $fi if ($fi_sec eq ""); をあとにつけておいたほうがいいかもしれません。

回答No.1

$fi =~ s/(.*)\.(.*)$/$1/; ではダメでしょうか。

sakurako_o
質問者

補足

ご回答ありがとうございます。 その、ファイル名の拡張子を省いたモノを、 別の変数、$fi_sec に渡すようにするにはどうしたらいいでしょうか?

関連するQ&A