• ベストアンサー

拡張子を除いたスクリプト名の取得方法を教えて下さい

はじめまして。Perlは初心者ですが、既存のPerl掲示板のカスタマイズに奮闘しています。 今、実行しているスクリプト名の取得方法でつまっています。 D:\cgitest\bbs\osiete.cgi というファイルを実行している時に、「osiete」を取り出したいと思っています。 $0で取得すると上記「D:\cgitest\bbs\osiete.cgi」がそのまま取得されました。正規表現で/\\(.*)\./、又は/\\(.*?)\./として$1を参照すると、「cgitest\bbs\osiete」が取得されます。 ?を使った最短一致を指定しても、開始位置が変わらないらしいので上記の結果には納得しているのですが、ではどうすれば「osiete」を取得できるか分からずに悩んでいます。「最後に出現する\」という指定が出来れば解決しそうなのですが、そのような表現方法があるのかどうかも分かりません。 出来れば正規表現で取り出したい(外部モジュール等を使用したくない)と思っているので、もし解決方法があればご教授をお願いしたいです。どうかよろしくお願い致します。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

以下のようにしてみて下さい。最初にスクリプト全体を印字、次に、ファイル名を印字、次に、拡張子(.cgi)を除いたもの(これが本当にほしいもの)を印字しています。 ------------------ #スクリプト名全体を印字 print "script=$0\n"; #スクリプト名を取得 $pos = rindex($0,"\\"); if ($pos < 0){ $name = $0; }else{ $name = substr($0,$pos+1); } #スクリプト名を印字 print "name=$name\n"; #拡張子.cgiを削除 $name =~ s/\.cgi$//i; print "name=$name\n"; --------------------------

10mo10mo
質問者

お礼

ご回答ありがとうございました。質問してからも試行錯誤して、何とか自力で解決できました(最適解ではないでしょうけど、/.*\\(.*)\.cgi/で求められました)。 なるほど、rindexやsubstrっていうものもあるんですね。大変参考になりました。また、正規表現で解決しにくい処理が出てきた時に試してみます。本当にありがとうございました!

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

/(?:.*\\)?(.*)\./ とか?

10mo10mo
質問者

お礼

ご回答ありがとうございました。質問してからも試行錯誤して、何とか自力で解決できました(最適解ではないでしょうけど、/.*\\(.*)\.cgi/で求められました)。ポイントは回答順につけさせて頂いたので、どうかご了承ください。 カッコでくくって"?"なんていう使い方もあるんですか。正規表現は覚えたてなので参考になりました。色々と試してみようと思います。本当にありがとうございました!