File Coverage

blib/lib/String/Mask.pm
Criterion Covered Total %
statement 29 29 100.0
branch 8 8 100.0
condition 4 4 100.0
subroutine 6 6 100.0
pod 1 1 100.0
total 48 48 100.0


line stmt bran cond sub pod time code
1             package String::Mask;
2 3     3   209417 use 5.006; use strict; use warnings;
  3     3   26  
  3     3   16  
  3         6  
  3         100  
  3         19  
  3         5  
  3         93  
3 3     3   18 use base 'Import::Export';
  3         5  
  3         1535  
4              
5             our $VERSION = '1.00';
6             our %EX = (
7             mask => [qw/all/]
8             );
9              
10             sub mask {
11 30     30 1 245 my ($string, $pos, $length, $mask_char) = @_;
12 30   100     93 $pos ||= 'start';
13 30 100       80 $length = int(length($string) / 2) unless $length;
14 30 100       102 if ($pos eq 'end') {
    100          
    100          
15 8         135 $string =~ s/(.*)(.{$length})$/_mask($1, $mask_char).$2/es;
  8         21  
16             } elsif ($pos eq 'middle') {
17 10         28 my $half = int((length($string) - $length) / 2);
18 10         165 $string =~ s/(.{$half})(.{$length})(.*)/_mask($1, $mask_char).$2._mask($3, $mask_char)/e;
  10         25  
19             } elsif ($pos eq 'email') {
20 4         105 $string =~ s/(.*)(.{$length}\@.*)$/$1._mask($2, $mask_char)/e;
  4         14  
21             } else {
22 8         125 $string =~ s/(\w{$length})(.*)/$1._mask($2, $mask_char)/e;
  8         25  
23             }
24 30         134 return $string;
25             }
26              
27             sub _mask {
28 40     40   103 my ($string, $char) = @_;
29 40   100     156 $char ||= '*';
30 40         237 $string =~ s/[^.@]/$char/g;
31 40         169 return $string;
32             }
33              
34             1;
35              
36             __END__