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

Perlのエラーについてご教授ください。初心者です。
CGIを別サーバに移したところ、Perlのバージョンが違うせいか以下のようなエラーがでました。

Use of uninitialized value in pattern match (m//)

エラー箇所は一部分で恐縮ですが、この部分です。
リファラーチェックで、3つ以外の参照元URLとパラメータの前方4文字だけチェックしています。
どう直せば良いのかわからず…ご教授ください。

unless ( $ENV {'HTTP_PEFERER'} =˜ /^(?:${referer1})¥?[a-z]{4]&_gl/
|| $ENV {'HTTP_PEFERER'} =˜ /^(?:${referer2})¥?[a-z]{4]&_gl/
|| $ENV {'HTTP_PEFERER'} =˜ /^(?:${referer3})¥?[a-z]{4]&_gl/ )
{
&error( '参照元が違います' . $ENV{'HTTP_PEFERER'} );
exit;
}

質問者からの補足コメント

  • 一部間違えていました。すみません!!!!

    unless ( $ENV {'HTTP_REFERER'} =˜ /^(?:${referer1})¥?[a-z]{4]&_gl/
    || $ENV {'HTTP_REFERER'} =˜ /^(?:${referer2})¥?[a-z]{4]&_gl/
    || $ENV {'HTTP_REFERER'} =˜ /^(?:${referer3})¥?[a-z]{4]&_gl/ )
    {
    &error( '参照元が違います' . $ENV{'HTTP_REFERER'} );
    exit;
    }

      補足日時:2023/05/31 13:26

A 回答 (5件)

>Use of uninitialized value $para in substr at 該当行〜


とでました…。
>でも動作は大丈夫そうで、このままエラー文を放置して良いのか悩んでいます。

前のエラーも含めてですが
use warnings;
を指定すると、これらのエラーが出るはずです。
use warnings;
をコメントアウトして、上記のエラーが出なければ、ワーニングなので
放置しても原則問題ありません。

前のエラーが出るのは、(Use of uninitialized valueがでるのは)
$ENV{'HTTP_REFERER'}が、いきなり出現した場合、
その$ENV{'HTTP_REFERER'}の内容が本当に正しいのか確認しなさい
という警告です。
ソース中に
$ENV={};
$ENV{'HTTP_REFERER'}="xxxxx"
のような箇所があれば、明らかに$ENV{'HTTP_REFERER'}の内容が担保されるので、この警告は出ません。

従って、$ENV{'HTTP_REFERER'}、$ENV{'QUERY_STRING'}に値が設定されていることが、明白なら、このエラーは無視して問題ないです。
(前のサーバーで動いていたなら問題ないと思いますが)
    • good
    • 0
この回答へのお礼

助かりました

親切丁寧にご教授くださりありがとうございます!
use warnings;知りませんでした!
エラー内容の解説も助かりました!
エラーは無視してアップしてみます!本当に本当にありがとうございました!!!

お礼日時:2023/05/31 20:26

>別の場所で同じエラーが発生したので、


>教えてもらったのを参考に修正してみます!

エラーが取れない場合は、再度質問してください。
    • good
    • 0
この回答へのお礼

ありがとうございます!!!なんてお優しい…。
上が解決したら、今度はここでエラーがでました…。
$para = $ENV{'QUERY_STRING'};

それで、同じようにQUERY_STRINGに置き換えてやってみたら、今度は$paraを使ったいるところで、
Use of uninitialized value $para in substr at 該当行〜
とでました…。
でも動作は大丈夫そうで、このままエラー文を放置して良いのか悩んでいます。

お礼日時:2023/05/31 17:40

エラーをとるのが目的なら


if (defined($ENV) && exists($ENV{'HTTP_REFERER'})){ ・・・①
unless ( $ENV{'HTTP_REFERER'} =~ /^(?:${referer1})\?[a-z]{4}&_gl/
|| $ENV{'HTTP_REFERER'} =~ /^(?:${referer2})\?[a-z]{4}&_gl/
|| $ENV{'HTTP_REFERER'} =~ /^(?:${referer3})\?[a-z]{4}&_gl/ )
{
&error( '参照元が違います' . $ENV{'HTTP_REFERER'} );
exit;
}
} ・・・②

でOKかと思います。
①と②を追加します。
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます!
教えて頂いた箇所はエラーが出なくなりました!
しかし、別の場所で同じエラーが発生したので、
教えてもらったのを参考に修正してみます!ありがとうございます!!!!!

お礼日時:2023/05/31 14:07

失礼ながら、提示されたソースは、


本来のソースをコピペして、貼り付けたものでしょうか。
それとも、あなたが手で打ち込んだものでしょうか。

ソース自体に誤りがあると思われますので、補足要求を行いました。
    • good
    • 0
この回答へのお礼

ありがとうございます!!諸事情あり手打ちしたものになります。すみません…。よろしくお願いします!

お礼日時:2023/05/31 13:28

'HTTP_REFERER'では。

    • good
    • 0
この回答へのお礼

すみません!打ち間違えました!ご指摘のとおりです!
元ファイルは'HTTP_REFERER'で書いており、上のエラーが出ました。

お礼日時:2023/05/31 13:24

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