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   315920 use 5.006; use strict; use warnings;
  3     3   10  
  3     3   18  
  3         14  
  3         69  
  3         14  
  3         4  
  3         206  
3 3     3   18 use base 'Import::Export';
  3         5  
  3         1385  
4              
5             our $VERSION = '1.03';
6             our %EX = (
7             mask => [qw/all/]
8             );
9              
10             sub mask {
11 30     30 1 411199 my ($string, $pos, $length, $mask_char) = @_;
12 30   100     96 $pos ||= 'start';
13 30 100       78 $length = int(length($string) / 2) unless $length;
14 30 100       89 if ($pos eq 'end') {
    100          
    100          
15 8         162 $string =~ s/(.*)(.{$length})$/_mask($1, $mask_char).$2/es;
  8         21  
16             } elsif ($pos eq 'middle') {
17 10         27 my $half = int((length($string) - $length) / 2);
18 10         205 $string =~ s/(.{$half})(.{$length})(.*)/_mask($1, $mask_char).$2._mask($3, $mask_char)/e;
  10         24  
19             } elsif ($pos eq 'email') {
20 4         117 $string =~ s/(.*)(.{$length}\@.*)$/$1._mask($2, $mask_char)/e;
  4         12  
21             } else {
22 8         668 $string =~ s/(\w{$length})(.*)/$1._mask($2, $mask_char)/e;
  8         31  
23             }
24 30         161 return $string;
25             }
26              
27             sub _mask {
28 40     40   109 my ($string, $char) = @_;
29 40   100     157 $char ||= '*';
30 40         302 $string =~ s/[^.@]/$char/g;
31 40         162 return $string;
32             }
33              
34             1;
35              
36             __END__