Changeset 8735

Show
Ignore:
Timestamp:
04/03/08 14:59:11 (5 years ago)
Author:
tokuhirom
Message:

HTTP-MobileAttribute?: eval とか激しいので、普通な感じで、capture しないようにしてみた。

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/HTTP-MobileAttribute/trunk/lib/HTTP/MobileAttribute/CarrierDetector.pm

    r8730 r8735  
    33use warnings; 
    44 
    5 # Dynamically generate it! 
    6 BEGIN 
    7 { 
    8     # this matching should be robust enough 
    9     # detailed analysis is done in subclass's parse() 
    10     my $DoCoMoRE = '^DoCoMo\/\d\.\d[ \/]'; 
    11     my $JPhoneRE = '^(?i:J-PHONE\/\d\.\d)'; 
    12     my $VodafoneRE = '^Vodafone\/\d\.\d'; 
    13     my $VodafoneMotRE = '^MOT-'; 
    14     my $SoftBankRE = '^SoftBank\/\d\.\d'; 
    15     my $SoftBankCrawlerRE = '^Nokia[^\/]+\/\d\.\d'; 
    16     my $EZwebRE  = '^(?:KDDI-[A-Z]+\d+[A-Z]? )?UP\.Browser\\/'; 
    17     my $AirHRE = '^Mozilla\/3\.0\((?:WILLCOM|DDIPOCKET)\;'; 
     5# this matching should be robust enough 
     6# detailed analysis is done in subclass's parse() 
     7our $DoCoMoRE = '^DoCoMo\/\d\.\d[ \/]'; 
     8our $JPhoneRE = '^(?i:J-PHONE\/\d\.\d)'; 
     9our $VodafoneRE = '^Vodafone\/\d\.\d'; 
     10our $VodafoneMotRE = '^MOT-'; 
     11our $SoftBankRE = '^SoftBank\/\d\.\d'; 
     12our $SoftBankCrawlerRE = '^Nokia[^\/]+\/\d\.\d'; 
     13our $EZwebRE  = '^(?:KDDI-[A-Z]+\d+[A-Z]? )?UP\.Browser\\/'; 
     14our $AirHRE = '^Mozilla\/3\.0\((?:WILLCOM|DDIPOCKET)\;'; 
    1815 
    19     # We use a list instead of a hash here, because the order matters. 
    20     # we check from the most likely to least likely 
    21     my @map = ( 
    22         DoCoMo     => [ $DoCoMoRE ], 
    23         ThirdForce => [ $JPhoneRE, $VodafoneRE, $VodafoneMotRE, $SoftBankRE, $SoftBankCrawlerRE ], 
    24         EZweb      => [ $EZwebRE ], 
    25         AirHPhone  => [ $AirHRE ] 
    26     ); 
     16sub detect { 
     17    my $user_agent = shift; 
    2718 
    28     my $code = <<EOM; 
    29 sub detect { 
    30     my \$user_agent = shift; 
    31 EOM 
    32     my $not_first = 0; 
    33     while (@map) { 
    34         my ($key, $re_list) = (shift @map, shift @map); 
    35         my $re = join('|', @$re_list); 
    36         $code .= sprintf( <<EOM, $not_first++ ? '} elsif' : 'if', $key); 
    37     %s (\$user_agent =~ /$re/) { 
    38         return '%s'; 
    39 EOM 
    40     } 
    41  
    42     $code .= <<EOM; 
     19    if ( $user_agent =~ /$DoCoMoRE/ ) { 
     20        return 'DoCoMo'; 
     21    } elsif ( $user_agent =~ /$JPhoneRE|$VodafoneRE|$VodafoneMotRE|$SoftBankRE|$SoftBankCrawlerRE/) { 
     22        return 'ThirdForce'; 
     23    } elsif ( $user_agent =~ /$EZwebRE/ ) { 
     24        return 'EZweb'; 
     25    } elsif ( $user_agent =~ /$AirHRE/ ) { 
     26        return 'AirHPhone'; 
    4327    } 
    4428    return 'NonMobile'; 
    4529} 
    46 EOM 
    4730 
    48     eval $code; 
    49     die "$@\n$code" if $@; 
    50 } 
    5131         
    52321;