File Coverage

blib/lib/String/Mask.pm
Criterion Covered Total %
statement 27 27 100.0
branch 4 4 100.0
condition 6 7 85.7
subroutine 6 6 100.0
pod 1 1 100.0
total 44 45 97.7


line stmt bran cond sub pod time code
1             package String::Mask;
2 3     3   195692 use 5.006; use strict; use warnings;
  3     3   29  
  3     3   15  
  3         7  
  3         66  
  3         14  
  3         4  
  3         105  
3 3     3   15 use base 'Import::Export';
  3         6  
  3         1426  
4              
5             our $VERSION = '0.02';
6             our %EX = (
7             mask => [qw/all/]
8             );
9              
10             sub mask {
11 26     26 1 246 my ($string, $pos, $length, $mask_char) = @_;
12 26   100     71 $pos ||= 'start';
13 26   66     110 $length ||= int(length($string) / 2);
14 26 100       72 if ($pos eq 'end') {
    100          
15 8         133 $string =~ s/(.*)(.{$length})$/_mask($1, $mask_char).$2/es;
  8         22  
16             } elsif ($pos eq 'middle') {
17 10         26 my $half = int((length($string) - $length) / 2);
18 10         161 $string =~ s/(.{$half})(.{$length})(.*)/_mask($1, $mask_char).$2._mask($3, $mask_char)/e;
  10         25  
19             } else {
20 8         127 $string =~ s/(\w{$length})(.*)/$1._mask($2, $mask_char)/e;
  8         22  
21             }
22 26         117 return $string;
23             }
24              
25             sub _mask {
26 36     36   117 my ($string, $char) = @_;
27 36   100     137 $char ||= '*';
28 36         201 $string =~ s/[^.@]/$char/g;
29 36         144 return $string;
30             }
31              
32             1;
33              
34             __END__