• ベストアンサー

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

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

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • 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/で求められました)。ポイントは回答順につけさせて頂いたので、どうかご了承ください。 カッコでくくって"?"なんていう使い方もあるんですか。正規表現は覚えたてなので参考になりました。色々と試してみようと思います。本当にありがとうございました!

関連するQ&A

  • シェルスクリプト 自身のファイルパスを取得する方法2

    シェルスクリプトで、自身のファイルパスを取得する方法を検索したところ、下記ページへとたどり着きました。 ▼おしえて!HOME'Sくん シェルスクリプト 自身のファイルパスを取得する方法 http://oshiete.homes.jp/qa2419248.html ▼教えて?Coneco shシェルで実行パスではなくファイルのパスを取得する方法 http://oshiete.coneco.net/qa2866868.html しかし、それぞれのページに掲載されていた ${0%/*} や ${1%/*} の意味がどうしてもわかりません。(一応、bashとかで検索してみたりはしました) そこで、下記内容について、教えてください! ・この0というのは、$0のことなのでしょうか。 ・この%は、正規表現か何かなのでしょうか。 ・この/は何を指しているのでしょうか? ・この*は、どの部分の1文字以上を指しているのでしょうか? 以上、よろしくお願いしますッ!

  • CGIでフォームデータを取得できません

    CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }

    • 締切済み
    • CGI
  • スクリプト実行言語にPerlを指定する方法

    ubuntu で (1)apache2 をインストール (2)peal をインストール しました。 その後、スクリプト実行言語にPerlを指定する方法がよくわからなく困っています。 ネットを見ながらやっていますが、スクリプト実行言語にPerlを指定する方法がわかれば先に進めます。どうやればいいのでしょうか?

    • ベストアンサー
    • Perl
  • CGI(BBS)の設置が出来ません(1)

    掲示板CGIサンプルをDLして設置作業を行っていますがうまく設置できません。 まず、サンプルをDLすると、以下の8書類が表示されました。 ・●●●.html(記事入力のHTML) ・●●●.html(記事表示のHTML) ・●●●.html(過去記事表示のHTML) ※HTMLのパーミッションは「666」に設定 ・jcode.pl(644に設定) ・bbs.cgi(755に設定) ・bbs.log(666に設定) ・bbs2.cgi(755に設定) ・pastno.dat(666に設定) ・プロバイダで指定されたPerlへのパス #!/usr/local/bin/perl CGIはプロバイダから指定されたcgi-binへアップしました。パーミッションの設定も上記の様に行いました。 ただ、bbs.cgiのソース(?)の中でよく分からない個所がありました。 (2)へ続く

    • 締切済み
    • CGI
  • ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!に関係なく実行できるようにするには。

    ApachでCGI(Perlスクリプト使用)を動かすときに先頭の#!のPerlを動かす場所(?)を指定する行が無かった場合や、違う場合でも、Apachが勝手にperlの場所を解釈しスクリプトを実行してくれるようになるhttpd.confの設定方法ってありますか?

    • ベストアンサー
    • CGI
  • Perlでページランクを取得する方法

    プログラミングが得意な方お願いします。 下図のリンクのページランクをPerlで実装したいのですが、 まずPDLモジュールをダウンロードし、リンク隣接行列を下記のように定義しました。 use PDL::Lite; my $mat1 = pdl [ [0, 1, 1/2, 0, 1/4, 1/2, 0], [1/5, 0, 1/2, 1/3, 0, 0, 0], [1/5, 0, 0, 1/3, 1/4, 0, 0], [1/5, 0, 0, 0, 1/4, 0, 0], [1/5, 0, 0, 1/3, 0, 1/2, 1], [0, 0, 0, 0, 1/4, 0, 0], [1/5, 0, 0, 0, 0, 0, 0] ]; そして下記の列ベクトルと上記の行列をかけてその答えと上記の行列をかけてさらにその答えと上記の行列をかけて・・・を繰り返し、掛けても答えが変わらなくなったところでその列ベクトルの値を取り出し正規化して出力するという方法を考えました。 my $mat2 = pdl [ [1], [1], [1], [1], [1], [1], [1] ]; ここで質問ですが、上記の処理をwhile文で実行したいのですが掛けても答えが変わらなくなったところでwhileからループを抜ける処理はどのように書いたら良いのでしょうか? Perlは初心者で、行列同士の比較はwhileの条件文ではできないでしょうし、列ベクトルの要素を一つ一つ比較する方法も分かりません。 以上写真のページランクをperlで取得する方法、宜しくお願い致します。

    • ベストアンサー
    • Perl
  • ドット絵の依頼

    現在作ろうと思っている2Dのアクションゲームがあるのですが、そのゲームはドット絵を一枚のポリゴンで表現するのではなく、各部位ごとにポリゴンを区切って描画する方法をとろうと思っています。 3Dモデルを画像にし、ドット絵に見立てて描画する方法ではなんとなく違和感が出ましたが思ったように動き、次にドット絵で試してみようと思うのですが、自分は描く事が出来ないのでドット絵を依頼できるサイトを見てみると、 http://www.freem.ne.jp/cgi-bin/bbs/party/osiete.cgi きちんとした仕事らしい依頼が多く、自分のように「作品になるか分からないが、試しに一体だけキャラを作ってくれ」というようなものはありませんでした。 都合の良いように思えますが、自分の目的にあった仕事を引き受けてくれるようなサイトはありますでしょうか?

  • yahooの検索ランキングの取得方法

    yahooの検索ランキングの取得方法 PHPにより、正規表現を使用してyahooの検索ランキングを取得しようと考えています。 googleやbingについては問題なく取得できたのですが、yahooのみうまく取得できません。 以下詳細を記述します 1.file_get_contents()により、 (http://search.yahoo.co.jp/search?ei=UTF-8&fr=top_ga1_sa&x=wrt&p=キーワード) のURLのファイルを取得 2. 1.で取得したファイルから正規表現により<div class="hd">というタグを検索 し、タグからタグまでの文字列を順番に配列に保存 3.取得した配列から指定キーワードを検索し、マッチした配列の順番を取得し、ランクとして表示 取得できないのがyahooだけであることからURLの指定ミスかと思ったのですが、ブラウザで確認すると 表示されています。また、検索するタグの問題かと思い別のものをしてみても問題は解決されませんでした。 どなたかお詳しい方がいらしたら是非ともご教示よろしくお願い致します。

    • ベストアンサー
    • PHP
  • クッキーの発行と取得

    現在作成しているWebコンテンツ内でCGIスクリプト(Perl)とPHPスクリプトが混在しているのですが、クッキーの処理で困っています。 CGIのほうで発行したクッキーはPHPで取得できるのですが、PHPで発行したクッキーをCGIでうまく読み込めていないようなのです。 CGIのほうは、無料配布サイトで見つけたものなのでPHP化もなかなか難しいところですし、原因と解決方法が分かりません。 一体どのようにすればいいのか、どなたかお教えいただけないでしょうか。よろしくお願いします。

    • ベストアンサー
    • PHP
  • preg_match : マッチした位置の取得

    phpにおける正規表現で、パターンにマッチした位置を取得したいのですが、引数で検索する位置を指定することはできても容易に取得する方法がみあたらないので困っています。 マッチした文字列を strstr() を使って位置取得するという方法しか思い浮かばないのですが、どうにかならないでしょうか。

    • ベストアンサー
    • PHP

専門家に質問してみよう