正規表現でのQuantifier follows nothing in regex; markedって?

このQ&Aのポイント
  • 正規表現のパターン内でQuantifier follows nothing in regexエラーが発生します。
  • $COOKIE_PREFIX変数の定義が別のファイルで使用されているため、エラーが発生しています。
  • エラーメッセージの解決方法は、$COOKIE_PREFIX変数の前にmain::を付けて直すことです。
回答を見る
  • ベストアンサー

Quantifier follows nothing in regex; marked って?

 if(not $name =~ /${COOKIE_PREFIX}_(.+)/) { このコードを書いているファイルに  use strict; 宣言をしたら、このコードの部分で  Variable "$COOKIE_PREFIX" is not imported at SeveralRoutine.pl line 173, line 855.  Global symbol "$COOKIE_PREFIX" requires explicit package name at SeveralRoutine.pl line 173, line 855.  Compilation failed in require at O:\public_html\besthotel\freeboard\cgi\listbbs.cgi line 8, line 855. のようなエラーが出ました。 $COOKIE_PREFIXを宣言しているのはメインルーチンであるlistbbs.cgiで、このファイルがSeveralRoutine.plなので、  ${COOKIE_PREFIX} を  $main::{COOKIE_PREFIX} と書き換えてみました。 すると  Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE main::COOKIE_PREFIX_(.+)/ at SeveralRoutine.pl line 173, line 855. と、エラーの内容が変わりました。  Variable "なんたらかんたら" is not imported・・・ というエラーメッセージはこの他にも多数出ましたが、それらは  "なんたらかんたら" の前に  main:: と付けたら直りました。メインルーチンの中で定義した変数を別のファイルで用いようとしたために起きたエラーです。 ところが件のコードは    $name   が   「$COOKIE_PREFIXにアンダーバー付きで添え字」   してある形式になっていなかったら・・・ という意味合いです。 メインルーチンで定義されている$COOKIE_PREFIXそのものをどうしようというコードではありません。 このエラーメッセージは何を言いたいのでしょう。そしてどう直せばこのエラーメッセージが出なくなるのでしょう?

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

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

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

自信がないんですが、量指定子と紛らわしいといっているんだと思いま す。以下の例なら何も言われませんでした。参考URLも参考になると思いま す use warnings; use strict; our $COOKIE_PREFIX = 'aaa'; my $name = 'aaaa_bbb'; # Quantifier follows nothing in regex; ... # 量指定子{}と紛らわしい ? # if ( not $name =~ /$main::{COOKIE_PREFIX}_(.+)/ ) { # print "test1\n"; # } # else { # print "test2\n"; # } # 何も言われない if ( not $name =~ /${main::COOKIE_PREFIX}_(.+)/ ) { print "test1\n"; } else { print "test2\n"; }

参考URL:
http://perldoc.jp/docs/perl/5.10.0/perldiag.pod
makoji
質問者

お礼

すみません。今回のコーディングに件のエラーメッセージは関係なかったようです。 メインルーチンで定義されている変数$COOKIE_PREFIXを別のファイルで用いるために  main:: を付けたのですが、問題は正規表現  $name =~ /${COOKIE_PREFIX}_(.+)/ のどこに  main:: を入れるのかという点で、私は  $main::{COOKIE_PREFIX} と記述しました。 その結果が  Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE main::COOKIE_PREFIX_(.+)/ at SeveralRoutine.pl line 173, line 855. というエラーになったのですが、  「正規表現中で量指定子は何にも伴われていない」 という指摘に対して、件の正規表現の方は、ちゃんと  「.」(全ての文字) という文字指定子を記述しています。 それでおかしいな、どういうことなんだと質問したわけですが、_--_1l1_1_さんのコードを見て気付きました。  $name =~ /${main::COOKIE_PREFIX}_(.+)/ これが正解だったんですね。 ありがとうございました。

関連するQ&A

  • use strictとグロブ?

    cgi-lib.plのReadParseの引数でParamグロブを使った場合、 use strict;をすると、必ず以下のエラーが表示されます。 use strictはそのまま使いたく、他の部分も厳密にチェックしたいのですが 何かよい方法はありますか? use strict; require 'cgi-lib.pl'; &ReadParse(*Param); my $MODE = $Param{'MODE'}; <----- errro Variable "%Param" is not imported at

    • ベストアンサー
    • Perl
  • エラーの意味がわかりません

    cgiが動かないため(自作したものではありません)、DOS上で構文チェックをしたところ、エラーがありました。 エラーを見てもよくわからないので教えてください。 エラーは以下の通りです。 >perl -cw a.cgi syntax error at a.cgi line 2, near ".." top_b.cgi had compilation errors. >perl -cw b.cgi Name "main::wday" used only once: possible typo at b.cgi line 18. Name "main::tt" used only once: possible typo at b.cgi line 261. Name "main::start" used only once: possible typo at b.cgi line 176. b.cgi syntax OK 解決のヒントとかあれば、あわせてアドバイスください。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • use strict;

    Global symbol "@exec_test_list" requires explicit package name at ./ctest.pl line 384. Global symbol "@exec_test_no" requires explicit package name at ./ctest.pl line 384. Global symbol "@protocol_list" requires explicit package name at ./ctest.pl line 397. Global symbol "@protocol_list" requires explicit package name at ./ctest.pl line 406. Global symbol "$name" requires explicit package name at ./ctest.pl line 413. use strict;を書くと以上のようなエラーメッセージが 出力されます。どうしたら、以上のようなエラーを 回避できるでしょうか?教えてください。

    • ベストアンサー
    • Perl
  • 「-wc」オプションの文法チェックで、警告が出ないようにするには?

    「-wc」オプションの文法チェックで、警告が出ないようにするには? たとえば「temp.pl」というライブラリに変数「$A」が定義されてあり、 それを「temp.cgi」というPerlスクリプトで参照したいとします。 これらを、「-wc」オプションを使って文法チェックをすると、 「変数$Aが一度も設定・参照されてないよ」といった旨の警告が出てしまいます。 この警告を出さないようにするにはどうしたらいいのでしょうか? 警告を出さないようにする記述方法って、なにかあるのでしょうか? それとも出てしまうのは仕方ないのでしょうか? 以下、実際のソースの中身および文法チェック結果です。 よろしくお願いします。 ===temp.plの内容=== #! c:/perl/bin/perl $A = '123'; 1; ===temp.cgiの内容=== #! c:/perl/bin/perl require "temp.pl"; print $A; ===文法チェック結果=== >perl -wc temp.pl Name "main::A" used only once: possible typo at temp.pl line 2. >perl -wc temp.cgi Name "main::A" used only once: possible typo at temp.cgi line 3.

    • ベストアンサー
    • Perl
  • cgi-libを使って変数値渡しをしたいのですが

    cgi間の変数渡しの質問をしたのですが、うまくいかなかったので、調べてみると、 cgi-lib.pl'を使うことで簡単に値を渡せるということが分かりました。 ですが、 use lib '/home/www'; require 'cgi-lib.pl';# cgi-lib.plを呼び出す $test=1000; # 変数値渡し? form_input_post.cgi?name=$test; &ReadParse(*in); として、$testの値をform_input_post.cgiに渡そうとしたのですが。 コンパイルエラーが出てしまいました。 Can't modify constant item in scalar assignment at form_input_post.cgi line 49, near "$test;" syntax error at form_input_post.cgi line 49, near "$test;" form_input_post.cgi had compilation errors. というエラーです。 初歩的なミスな気がしますが原因がわからないので教えて頂きたいです。 よろしくお願いします。

    • 締切済み
    • CGI
  • strict と require と グローバル変数

    また基本的なことをお伺いします。 ↓メインスクリプト(main.pl) ------------------------------ #!perl use strict; require("x.pl"); print "X = $x\n"; ------------------------------ ↓サブスクリプト(x.pl) ---------------------- our $x = "XXX"; ---------------------- これをそのまま、main.plを実行すると、 Global symbol "$x" requires explicit package name at main.pl line 4. のようにエラーが出ます。 この対処として、色々試したのですが、 例えば、次のようにすれば、とりあえず回避はできました。 ↓メインスクリプトにて、 ------------------------------ #!perl use strict; our $x; ←★ここで宣言を入れておく。 require("x.pl"); print "X = $x\n"; ------------------------------ <質問です> 1)この回避策は妥当でしょうか。他に正しい方法がありましたら、教えてください。 2)そもそも、use strictは、requireの展開よりも先に実行されてしまうものでしょうか。 以上、よろしくお願いします。 Win-2000sp4+ActivePerlのV5.8.7で使っています。

    • ベストアンサー
    • Perl
  • useとrequireでエラー

    初歩的な質問で失礼いたします。 下記の記述でプログラムを実行すると正常にプログラムが動きます。(省略以降は全く同一のプログラムです) ■実行問題なし1 #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; --------省略--------------- ■実行問題なし2 #!/usr/local/bin/perl use strict; use DBI; --------省略--------------- しかし、下記の記述だとエラーが発生していまいます。 #!/usr/local/bin/perl use strict; use DBI; require 'cgi-lib.pl'; require 'jcode.pl'; --------省略--------------- エラーログは、下記の通りです。 Global symbol "$in" requires explicit package name at search.cgi line 21. Global symbol "$parameter" requires explicit package name at search.cgi line 23. Global symbol "$name" requires explicit package name at search.cgi line 23. Execution of search.cgi aborted due to compilation errors. requireとuseは同時に記述してはいけないのでしょうか? 同時に記述しないと目的のプログラムを実現する方法が大きく変わってきてしまうので、非常に困ってしまいます。 もし、ご存知の方がいらっしゃったら教えてください。 宜しくお願い致します。

  • %stderr%の値が何をさしているのか

    Bareword "FH" not allowed while "strict subs" in use at C:/Apache Group/Apache2/cgi-bin/cgi.cgi line 1000. Perlを動かしたらこのような標準エラーが帰りました。 FHはファイルハンドルです。 はじめてみるエラーなので何を表しているのかわかりません。 該当のコードは $q = new CGI(FH); です。 open(FH,'<',$save_dir.$ID{$name}.'.dat'); $q = new CGI(FH); close FH; このようにして読み出しています。 new CGIはCGI.pmのクラス作成です。 何が問題なのでしょうか?

    • ベストアンサー
    • Perl
  • CGIでの500エラー

    CGIサイトを作成中の者です。 CGIをサーバーに転送して動作確認をしたらサーバーエラーになってしまいます。 サーバーに問い合わせて、以下が原因でエラーになっていることはわかりました。 Unrecognized character \x90 at ./miuinit.pl line 100. Compilation failed in require at miumgr.cgi line 11. でもCGI初心者なので、”\x90”が何をさすのか、2番目の文ではどこを直せばいいかわかりません。 サーバー会社では自分でCGIを修正せよとのことです。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • オープンソースの投票管理システム

    オープンソースの投票管理システム このプログラムを使用したことある方いらっしゃいますか? http://plus-code.net/cgi-flash-enquete/web_enquete01/ 解説通りに設定しているのですが、こんなエラーメッセージが出てしまいます。 Software error: Global symbol "$ref_array_hash" requires explicit package name at perl/Cf/Part/Enquete.pm line 870. Global symbol "$ref_array_hash" requires explicit package name at perl/Cf/Part/Enquete.pm line 871. Compilation failed in require at index.cgi line 17. BEGIN failed--compilation aborted at index.cgi line 17. 見てもさっぱり何ですが、これはつまりプログラム自体に問題があるということでいいんでしょうか。。それならそれで諦めもつくのですが‥

    • 締切済み
    • CGI

専門家に質問してみよう