| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package Email::Address::Loose::EmailValidLoose; | 
| 2 |  |  |  |  |  |  |  | 
| 3 |  |  |  |  |  |  | # Note: | 
| 4 |  |  |  |  |  |  | # The following code were copied from Email::Valid::Loose 0.05. | 
| 5 |  |  |  |  |  |  | # http://search.cpan.org/perldoc?Email::Valid::Loose | 
| 6 |  |  |  |  |  |  | # To make same behavior with Email::Valid::Loose about local-part. | 
| 7 |  |  |  |  |  |  |  | 
| 8 |  |  |  |  |  |  |  | 
| 9 |  |  |  |  |  |  |  | 
| 10 |  |  |  |  |  |  |  | 
| 11 |  |  |  |  |  |  |  | 
| 12 | 11 |  |  | 11 |  | 62 | use strict; | 
|  | 11 |  |  |  |  | 17 |  | 
|  | 11 |  |  |  |  | 3178 |  | 
| 13 |  |  |  |  |  |  | our $VERSION = '0.05'; | 
| 14 |  |  |  |  |  |  |  | 
| 15 |  |  |  |  |  |  | # use Email::Valid 0.17; # Note: don't need | 
| 16 |  |  |  |  |  |  | # use base qw(Email::Valid); # Note: don't need | 
| 17 |  |  |  |  |  |  |  | 
| 18 |  |  |  |  |  |  | # This is BNF from RFC822 | 
| 19 |  |  |  |  |  |  | my $esc         = '\\\\'; | 
| 20 |  |  |  |  |  |  | my $period      = '\.'; | 
| 21 |  |  |  |  |  |  | my $space       = '\040'; | 
| 22 |  |  |  |  |  |  | my $open_br     = '\['; | 
| 23 |  |  |  |  |  |  | my $close_br    = '\]'; | 
| 24 |  |  |  |  |  |  | my $nonASCII    = '\x80-\xff'; | 
| 25 |  |  |  |  |  |  | my $ctrl        = '\000-\037'; | 
| 26 |  |  |  |  |  |  | my $cr_list     = '\n\015'; | 
| 27 |  |  |  |  |  |  | my $qtext       = qq/[^$esc$nonASCII$cr_list\"]/; # " | 
| 28 |  |  |  |  |  |  | my $dtext       = qq/[^$esc$nonASCII$cr_list$open_br$close_br]/; | 
| 29 |  |  |  |  |  |  | my $quoted_pair = qq<$esc>.qq<[^$nonASCII]>; | 
| 30 |  |  |  |  |  |  | my $atom_char   = qq/[^($space)<>\@,;:\".$esc$open_br$close_br$ctrl$nonASCII]/;	# " | 
| 31 |  |  |  |  |  |  | my $atom        = qq<$atom_char+(?!$atom_char)>; | 
| 32 |  |  |  |  |  |  | my $quoted_str  = qq<\"$qtext*(?:$quoted_pair$qtext*)*\">; # " | 
| 33 |  |  |  |  |  |  | my $word        = qq<(?:$atom|$quoted_str)>; | 
| 34 |  |  |  |  |  |  | my $domain_ref  = $atom; | 
| 35 |  |  |  |  |  |  | my $domain_lit  = qq<$open_br(?:$dtext|$quoted_pair)*$close_br>; | 
| 36 |  |  |  |  |  |  | my $sub_domain  = qq<(?:$domain_ref|$domain_lit)>; | 
| 37 |  |  |  |  |  |  | my $domain      = qq<$sub_domain(?:$period$sub_domain)*>; | 
| 38 |  |  |  |  |  |  | my $local_part  = qq<$word(?:$word|$period)*>; # This part is modified | 
| 39 |  |  |  |  |  |  |  | 
| 40 |  |  |  |  |  |  | # Finally, the address-spec regex (more or less) | 
| 41 | 11 |  |  | 11 |  | 61 | use vars qw($Addr_spec_re); | 
|  | 11 |  |  |  |  | 21 |  | 
|  | 11 |  |  |  |  | 1474 |  | 
| 42 |  |  |  |  |  |  | $Addr_spec_re   = qr<$local_part\@$domain>; | 
| 43 |  |  |  |  |  |  |  | 
| 44 | 11 |  |  | 11 | 0 | 1078 | sub peek_local_part { qr/$local_part/ } # Note: added by Email::Address::Loose | 
| 45 |  |  |  |  |  |  | 1; |