• 締切済み

いくつかの条件に不一致の処理

{$CNF::pda{'browser'}{'agent'}{'list'}}というユーザーエイジェントのリストがあり、 そこに7つ登録されていて 7つすべてが条件不一致の場合に 以下のような構文だとホームというリンクが7回表示されてしまい困っています。 7つの条件不一致であった場合でも 1回しか(ホームへのリンクを1回しか表示しない)実行ようにしたいのですが どのようにしたらいいのか具体的に教えてください。 どうかよろしくお願いいたします。 foreach (@{$CNF::pda{'browser'}{'agent'}{'list'}}) { length($_) or next; unless (index($ENV{'HTTP_USER_AGENT'}, $_) != -1) { push(@menu, qq|<a class=Menu href="$CNF::base{'home'}{'url'}">ホーム</a>|);}}

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

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

はたまた last

masa-25
質問者

お礼

何度もありがとうございます。 すべてやってみたことなのですが すべてダメでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あるいはフラグ

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

grep?

関連するQ&A

  • 書き方を教えてください

    まだ初心者なのですが、 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, '番号を通知して下さい。'); と言うように書きたいのですが、どう書いて良いかわかりません。 どなたか教えてください。

    • ベストアンサー
    • 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
  • 条件分岐について

    # 禁止文字 @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
  • ユーザーエージェント(ソフトバンク)

    初めて投稿いたします。 現在PHPで携帯とPCの振り分けのプログラムを 作っていますが、ソフトバンクのエミュレーターで 試したところ、どうしてもPCの方のサイトへ飛んでいってしまい ます。ユーザーエージェントは "SoftBank"を返すはずなので 問題ないはずなんですが、どなたか原因が分かりましたら ご教授いただけると大変幸いです。 ----------------------------------------------------------- $user_agent= explode( "/", $_SERVER['HTTP_USER_AGENT']); $GB['user_agent0']=$user_agent[0]; if(preg_match("/^KDDI/",$user_agent[0])) $GB['env'] = "i"; switch( $user_agent[0] ){ case "DoCoMo" : case "L-mode" : case "ASTEL" : case "UP.Browser" : case "PDXGW" : case "SoftBank" : case "Vodafone" : case "J-PHONE" : $GB['env'] = "i";

    • 締切済み
    • PHP
  • リダイレクト転送について

    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
  • 複数の比較( =~ )を効率よくまとめたい

    アクセス端末によって見え方を変えさせるため、条件節ifで =~ を使って分岐させているのですが、ユーザーエージェントがあまりにも多く、コードが長くなりすぎ制作に支障が出てきています 100%完璧に分岐させるところまでは求めていないため(アクセスの95%程度うまく分けられればいいかと思ってます)、たとえばスマホの場合はiPhoneとかAndroid、PCの場合はMSIEなど極力共通の部分を見つけてまとめてはいますが、それでも携帯、スマホ、PCと分けると非常に多くなり、 if(($ENV{'HTTP_USER_AGENT'} =~ /MSIE/) || ($ENV{'HTTP_USER_AGENT'} =~ /Firefox/)){} など比較の片方は同じなのに同じことを何度も書く必要があり、非効率かつ強烈に長くなってしまい何とかまとめられないかと格闘しています たとえば別で $os_pc = "MSIE,Firefox"; $os_mb = "DoCoMo,KDDI"; など別でまとめて、 if($ENV{'HTTP_USER_AGENT'} =~ /$os_pcの,で分解したそれぞれの文字列と比較/){ PCと判定 }elsif($ENV{'HTTP_USER_AGENT'} =~ /$os_mbの,で分解したそれぞれの文字列と比較/){ 携帯と判定 } といったように、スマートに条件分岐させられないかと模索中ですが、=~ で別で用意したデータを,で分解してそれぞれと比べるとかできないでしょうか。 =~での比較ではなく、他の方法でもかまいませんので、ぜひお知恵をお貸しください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • .htaccessの記述

    さくらのレンタルサーバを使っています。 SetEnvIf User-Agent "Googlebot" shutout1 SetEnvIf User-Agent "Slurp" shutout2 SetEnvIf User-Agent "msnbot" shutout3 SetEnvIf Referer "google\.co\.jp" shutout4 SetEnvIf Referer "yahoo\.co\.jp" shutout5 SetEnvIf Referer "google\.com" shutout6 order allow,deny allow from all deny from env=shutout1 deny from env=shutout2 deny from env=shutout3 deny from env=shutout4 deny from env=shutout5 deny from env=shutout6 (改行) 新しくつくったページですので検索ロボットにはまだ拾われていないのでGmailで実験しましたが、http://mail.google.com/mail/~ からアクセスできてしまいます。アスキーモードで転送し、ファイル名もOKです。何がダメなのでしょうか… あと、「SetEnvIf Referer "google" shutout*」と記述すれば「google」を含むアドレスからのリンクはまとめてすべて拒否できますか? よろしければチェックをお願いします。

    • ベストアンサー
    • HTML
  • 携帯端末認識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
  • perlでアクセス端末の解像度を知りたい

    アクセス元の端末(たとえばスマホなのかPCなのか)で表示する画像を変えたいため、アクセス端末の解像度を取得したいのですがどうすればよいでしょうか? いろいろ探してみたのですが、javascriptばかりヒットし、use Term::ReadKeyというものも出てきたのですが、その参考ページをそっくり入れてみても動作しません。 sub agent{ %agent_type = ( qr/MSIE/i => 'p', qr/iPhone/ => 's', qr/iPad/ => 't', qr/Android/ => 's', 一部省略 ); } sub browser{ &agent; my $ua = $ENV{'HTTP_USER_AGENT'}; foreach my $key(keys %agent_type){ if ($ua =~ $key){ $ua_type = $agent_type{$key}; last; } } } 上記のような環境変数で振り分けることも考えたのですが、Androidだとスマホとタブレットと解像度が大きく違うものでも同じものをはき出してしまうかと思い、正確な振り分けができず困っています。 どうかperlだけで解決できる方法がありましたらぜひ教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • mod_rewriteで携帯/PCサイト振り分けの記述について

    現在PCサイトを持っていまして、このサイトの携帯版を作りました。 そこでmod_rewriteを使って.htaccessへの記述でお伺いします。 (mod_rewritは借りているサーバーにインストールされています)。 現在のPCサイトは、 http://www○○○.com/です。 携帯サイトは、  DoCoMo:http://www○○○.com/mobaile/i/  Softbank:http://www○○○.com/mobaile/v/  au:  http://www○○○.com/mobaile/ez/ です。 ■携帯振り分けの.htaccessは下記のとおりなのですが、これであっていますか?オプションなども大丈夫でしょうか? RewriteEngine On #DoCoMo端末へのリンク RewriteCond %{HTTP_USER_AGENT} ^DoCoMo RewriteRule ^$ http://www○○○.com/mobile/i/[L] #Vodafone、J-Phone、Softbank端末へのリンク RewriteCond %{HTTP_USER_AGENT} ^vodafone [OR] RewriteCond %{HTTP_USER_AGENT} ^softbank [OR] RewriteCond %{HTTP_USER_AGENT} ^J-PHONE RewriteRule ^$ http://www○○○.com/mobile/v/[L] #KDDI、au端末へのリンク RewriteCond %{HTTP_USER_AGENT} ^KDDI [OR] RewriteCond %{HTTP_USER_AGENT} ^Up.Browser RewriteRule ^$ http://www○○○.com/mobile/ez/[L] ■また、PCでアクセスした場合のRewriteCondの書き方がわかりません。 上記以外の場合はPCサイト:http://www○○○.com/にアクセスするにはどのようにしたらよいのでしょうか? お手数ですがおわかりの方がいましたらよろしくお願いします。

    • 締切済み
    • CGI

専門家に質問してみよう