• ベストアンサー

書き方を教えてください

まだ初心者なのですが、 if($ENV{'HTTP_USER_AGENT'} =~ /UP.Browser/) { unless($ENV{'HTTP_X_UP_SUBNO'} =~ /.ezweb.ne\.jp$/) { push(@error, '番号を通知して下さい。'); } } という構文を作りました。 ($ENV{'HTTP_X_UP_SUBNO'} =~ /.ezweb.ne\.jp$/) もしくは unless($ENV{'HTTP_USER_AGENT'} =~ /SN/) の時に push(@error, '番号を通知して下さい。'); と言うように書きたいのですが、どう書いて良いかわかりません。 どなたか教えてください。

  • s-m25
  • お礼率63% (7/11)
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • goruuu
  • ベストアンサー率100% (1/1)
回答No.1

条件を1行に書きたいのであれば if( ($ENV{'HTTP_X_UP_SUBNO'} =~ /.ezweb.ne\.jp$/) or ( $ENV{'HTTP_USER_AGENT'} !~ /SN/)){ push(@error, '番号を通知して下さい。'); } でどうでしょうか?

s-m25
質問者

お礼

orを使えばいいんですね! どうもありがとうございました。 とても助かりました。 また機会がありましたらお教えください!

関連するQ&A

  • Perlで携帯電話の製造番号を取得

    Perlで携帯電話の製造番号を取得 Perlで携帯電話の製造番号を取得するスクリプトを作っています。 docomoのD905iしか持っておらず、他の携帯での動作確認ができません。 以下のスクリプトで正しいでしょうか? 以下のスクリプトで、他にやっておいたほうがよい事など、 何かアドバイスがありましたらお願いします。 やりたいことは、 docomo、au、ソフトバンクのみで取得する。 iPhone、イーモバイルは取得しない。 古い携帯電話で取得できないものは切り捨てる。 携帯電話でアクセスした人が、それぞれに画面をカスタマイズでき、 次回アクセスしたときも同じ画面が表示されるようなサイトを作ろうとしています。 普通はクッキーで本人確認するのだと思いますが、携帯電話ではクッキーが 無いので、代わりに製造番号を使って本人確認しようと考えています。 1ヶ月くらいだけオープンするサイトであり、金銭的な絡みも個人情報も無いので、 携帯電話の所有者が変わったときの問題は無いと思っています。 ■ HTML <a href="./test.cgi" utn>製造番号取得</a> ■ Perl #--ソフトバンク if($ENV{'HTTP_X_JPHONE_UID'} ne ''){ $uid = $ENV{'HTTP_X_JPHONE_UID'}; } #--au elsif($ENV{'HTTP_X_UP_SUBNO'} ne ''){ $uid = $ENV{'HTTP_X_UP_SUBNO'}; } #docomo else{ $agent = $ENV{'HTTP_USER_AGENT'}; $ser_index = index($agent,'ser'); if ($ser_index != -1) { $uid = substr($agent,$ser_index+3); } } print"製造番号:$uid<br>\n"; 以上、よろしくお願いします。

    • ベストアンサー
    • Perl
  • 携帯端末認識User-Agentについて

    初心者なのですが、CGIで携帯サイトを作っていますが。 実機がうまく動きません。User-Agentに問題があると考えています。 現在のソースと主な現象を記しますので、適切なものを教えて下さい。お願いします。 #----------# # 端末認識 # #----------# sub useragent { my $ua; #次にi-mode端末かどうかチェック if ($ENV{'HTTP_USER_AGENT'} =~ /^DoCoMo\/\d/) { $ua = 1; #次にJ-Phone端末かどうかチェック } elsif ($ENV{'HTTP_USER_AGENT'} =~ /^J-PHONE\/\d/) { $ua = 2; #EZweb端末かどうかチェック } elsif (($ENV{'HTTP_USER_AGENT'} =~ 'UP.B') && ($ENV{'HTTP_X_UP_SUBNO'} ne "")){ $ua = 3; #その他はPCとする } else { $ua = 0;} #PCブラウザ再判定 if ($ENV{'HTTP_USER_AGENT'} =~ /Mozilla\/|MSIE|Netscape|Opera|Lynx|AOL|Gecko/) {$ua = 0;} return $ua; } 主な現象 AU:ページ表示ごとに、いちいちブラウザメニューからページ更新をしなければならない(AUの特性もありますが) ソフトバンク:携帯版ではなく、PC版が表示されてしまう。 ドコモ :Pは問題ないようだが、SHは会員登録画面のフォームが半分の項目しか表示されず、次のページで残りの半分 は表示されるが、フォームにすべて書き込んで、登録送信をクリックしても、エラーデータ、の表示が出る。

    • 締切済み
    • CGI
  • ソフトバンク携帯のuidについて

    Softbank携帯のuidは ENV{HTTP_X_JPHONE_UID}で取得可能とネットで見たので $sbuid=$ENV{'HTTP_X_JPHONE_UID'} と記述してみたのですが、識別番号を取得できません。 同じようにauの識別番号を取得できるように $auid=$ENV{'HTTP_X_UP_SUBNO'} としてあるのですが、こちらは取得できています。 なぜソフトバンクの方は取得できないのでしょうか?

  • プロキシの制限について

    プロキシの制限を以下のように記述したのですが、 プロキシを制限する上で加えた方がいい記述や 削除した方がいい環境変数などありますか? 助言いただきたくお願いいたします。 if($ENV{'HTTP_VIA'}||$ENV{'HTTP_FORWARDED'}||$ENV{'HTTP_PROXY_CONNECTION'}||$ENV{'HTTP_CACHE_INFO'}||$ENV{'HTTP_XROXY_CONNECTION'}||$ENV{'HTTP_XONNECTION'}||$ENV{'HTTP_X_FORWARDED_FOR'}){ unless ($ENV{'REMOTE_HOST'} =~ /docomo/){#ドコモの携帯は除外する push(@error, 'プロキシ経由の利用は制限しております。'); } }

    • ベストアンサー
    • Perl
  • ソフトバンクも対応したい!

    CGIで携帯サイトを構築しています。こちらのサイトで配布されている 携帯電話から送信される固有の情報を照合し簡単ログインさせる方法で構築していますが、ソフトバンクやウィルコムなど新しい情報に対応していなく、困っています。対応した改造方法をアドバイス願います。 また、配布先サイトBBSでもサポートはしていないのでここでお願いしました。 http://www.rescue.ne.jp/cgi/keitai_login/ cert.cgiファイルの中 $UA = $ENV{'HTTP_USER_AGENT'}; $SN = $ENV{'HTTP_X_UP_SUBNO'}; # サブスクライバID(ezWEB) if (($UA =~ 'UP.B') && ($SN ne "")) { $ua = "ezweb"; if ($ENV{'HTTP_X_UP_DEVCAP_MULTIMEDIA'}) { $ua = "ezweb2"; } # WAP2.0対応機種 $UID = $SN; } elsif ($UA =~ /^DoCoMo\/\d/) { $ua = "imode"; if ($UA =~ /ser(\w{15})/) { $UID = $1; } # <foma> DoCoMo/2.0 N2001(c10;serXXXXXXXXXXXXXXX; iccxxxxxxxxxxxxxxxxxxxx) elsif ($UA =~ /ser(\w{11})/) { $UID = $1; } # <mova> DoCoMo/1.0/X503i/c10/serNMAIA000001 } elsif ($UA =~ /^J-PHONE\/\d/) { $ua = "j-sky"; if ($UA =~ /.*\/.*\/.*\/SN(\w+)\s/) { $UID = $1; } # パケット対応機 J-PHONE/4.0/J-SH51/SN************ SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0 Ext-Profile/JSCL-1.1.0 } else { $ua = 0; }

  • orとelsif

    質問があります。 HTTP_USER_AGENTによって携帯端末とPC端末を振り分けるCGIを製作中です。 その際に疑問に思ったのですが、 if(($ENV{'HTTP_USER_AGENT'} =~ /***/i) or ($ENV{'HTTP_USER_AGENT'} =~ /***/i) or.....{ ~~~ } のように1行でorで繋げる方法と if($ENV{'HTTP_USER_AGENT'} =~ /***/i){ ~~~ } elsif($ENV{'HTTP_USER_AGENT'} =~ /***/i){ ~~~ } のようにelsifで繋げる方法とどちらが効率がいいのでしょうか? メモリの消費 サーバーへの負担 処理の速度 を中心にお願いします。

    • ベストアンサー
    • Perl
  • ユーザーエイジェントの置き換え

    ユーザーエイジェントを検索して UP.Browserという文字列があった場合、 ユーザーエイジェントをauという置き換え表示したいと思っています。 具体的には KDDI-KC3R UP.Browser/6.2_7.2.7.1.K.4.310 (GUI) MMP/2.0 ↓ au と表示したいのですが、 Perlで記述する場合以下のように書いて間違えありませんか? 間違いなどありましたご指摘ください。 if($ENV{'HTTP_USER_AGENT'} =~ /UP.Browser/) { $agent=~s/$ENV{'HTTP_USER_AGENT'} /au/g; }

    • ベストアンサー
    • Perl
  • CGIにてソフトバンクがPCとして認識されます。

    掲示板のCGIなのですが、ソフトバンクではPC画面へ飛ばされてしまいます。下記の部分あたりではないかと思うのですが、書き直しで解決できるのでしょうか?このCGIを使いたいので、お願い致します。 #▼ホスト名・UA取得 $HOST = $ENV{'REMOTE_HOST'}; $ADDR = $ENV{'REMOTE_ADDR'}; $UA = $ENV{'HTTP_USER_AGENT'}; $SN = $ENV{'HTTP_X_UP_SUBNO'}; if ($UA =~ /^DoCoMo\/\d/) { $AGEN = "i-mode"; }elsif ($UA =~ /^Vodafone\/\d/) { $AGEN = "Vodafone"; }elsif (($UA =~ 'UP.B') && ($SN ne "")){ $AGEN = "AU"; }else { $AGEN="PC";} if ($UA =~ /Mozilla\/|MSIE|Netscape|Opera|Lynx|AOL|Gecko/) {$AGEN="PC";} if ($HOST eq '') { $HOST = $ADDR; } if ($HOST eq $ADDR) { $HOST = gethostbyaddr(pack('C4',split(/\./,$HOST)),2) || $ADDR; }

    • 締切済み
    • CGI
  • 条件分岐について

    # 禁止文字 @haijyo = ('jp','JP','JP','jp','com','COM','COM','com','net','NET','net',); foreach $haijyo (@haijyo) { if($body =~ /$haijyo/){ push(@error, '本文にメールアドレスやURLの記入はできません。または禁止ワードが含まれています') } } を禁止ワードが本文($body)に含まれており なおかつユーザーエージェントにwindowsが含まれていた(いずれも一致した)場合、 エラーを吐き出すようにしたくて elsif($ENV{'HTTP_USER_AGENT'} =~ /windows/)を書きくわえてみたのですがうまくいきません。 どのようにしたら両方の条件式に一致した場合にエラーを吐き出せるのでしょうか?

    • ベストアンサー
    • Perl
  • リダイレクト転送について

    URL一つで使用端末の種類別のURLに飛ばしたいのですが CGIぼんさんのところのUser Agent を使った方法のを採用したいと考えています。 # User Agent によるキャリア判別 @user_agent = split(/\//,$ENV{'HTTP_USER_AGENT'}); if ($user_agent[0] eq 'ASTEL') { # ドットi 用の処理 } elsif ($user_agent[0] eq 'UP.Browser') { # EZweb 旧端末用の処理 } elsif ($user_agent[0] =~ /^KDDI/) { # EZweb WAP2.0 対応端末用の処理 } elsif ($user_agent[0] eq 'PDXGW') { # H" 用の処理 } elsif ($user_agent[0] eq 'DoCoMo') { # i-mode 用の処理 } elsif ($user_agent[0] eq 'J-PHONE') { # J-SKY 用の処理 } elsif ($user_agent[0] eq 'L-mode') { # L-mode 用の処理 } else { # それ以外 } 具体的にはどのような記述にしてどこにアップすればよいのでしょうか? 初心者なので御教授戴ければ幸いです

    • ベストアンサー
    • CGI

専門家に質問してみよう