アプリ版:「スタンプのみでお礼する」機能のリリースについて

 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そのものをどうしようというコードではありません。

このエラーメッセージは何を言いたいのでしょう。そしてどう直せばこのエラーメッセージが出なくなるのでしょう?

A 回答 (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
    • good
    • 0
この回答へのお礼

すみません。今回のコーディングに件のエラーメッセージは関係なかったようです。

メインルーチンで定義されている変数$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}_(.+)/
これが正解だったんですね。

ありがとうございました。

お礼日時:2009/06/22 01:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A