File Coverage

blib/lib/String/Nysiis.pm
Criterion Covered Total %
statement 38 39 97.4
branch 1 2 50.0
condition n/a
subroutine 3 3 100.0
pod 0 1 0.0
total 42 45 93.3


line stmt bran cond sub pod time code
1             package String::Nysiis;
2              
3             require 5.005_62;
4 1     1   632 use strict;
  1         1  
  1         32  
5 1     1   4 use warnings;
  1         1  
  1         652  
6              
7             require Exporter;
8             our @ISA = qw(Exporter);
9             our %EXPORT_TAGS = ( 'all' => [ qw(
10             nysiis
11             ) ] );
12              
13             our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
14              
15             our @EXPORT = qw();
16             our $VERSION = '1.00';
17              
18              
19             # Preloaded methods go here.
20             sub nysiis
21             {
22 1     1 0 32 my($string) = @_;
23              
24 1         2 $string = uc($string);
25            
26 1         10 $string =~ s/[^A-Za-z]//g;
27 1         10 $string =~ s/[SZ]*$//g;
28 1         2 $string =~ s/^MAC/MC/;
29 1         3 $string =~ s/^PF/F/;
30              
31 1         2 $string =~ s/IX$/IC/;
32 1         2 $string =~ s/EX$/EC/;
33 1         3 $string =~ s/(?:YE|EE|IE)$/Y/;
34 1         3 $string =~ s/(?:NT|ND)$/N/;
35              
36 1         2 $string =~ s/(.)EV/$1EF/g;
37 1         2 my $first = substr($string,0,1);
38 1         5 $string =~ s/[AEIOU]+/A/g;
39 1         2 $string =~ s/AW/A/g;
40            
41 1         2 $string =~ s/GHT/GT/g;
42 1         2 $string =~ s/DG/G/g;
43 1         2 $string =~ s/PH/F/g;
44 1         5 $string =~ s/(.)(?:AH|HA)/$1A/g;
45 1         2 $string =~ s/KN/N/g;
46 1         2 $string =~ s/K/C/g;
47 1         2 $string =~ s/(.)M/$1N/g;
48 1         3 $string =~ s/(.)Q/$1G/g;
49 1         2 $string =~ s/(?:SCH|SH)$/S/;
50 1         3 $string =~ s/YW/Y/g;
51            
52 1         2 $string =~ s/(.)Y(.)/$1A$2/g;
53 1         1 $string =~ s/WR/R/g;
54            
55 1         2 $string =~ s/(.)Z/$1S/g;
56            
57 1         2 $string =~ s/AY$/Y/;
58 1         3 $string =~ s/A+$//;
59              
60 1         5 $string =~ s/(\w)\1+/$1/g;
61            
62 1 50       9 if ($first =~ /[AEIOU]/) {
63 0         0 substr($string,0,1) = $first;
64             }
65            
66 1         3 return $string;
67             }
68              
69             1;
70             __END__