sub detaint_1 {
$[0] =~ /^(.*)$/;
return $1;
}
####
sub detaint_1_inp {
$[0] =~ /^(.*)$/;
$[0] = $1;
}
####
sub detaint_n {
map { /^(.*)$/; $1 } @_;
}
sub detaint_n_inp {
foreach (@_) { /^(.*)$/; $_ = $1}
}
####
my @a;
# ... set @a ...
my @b = map { detaint_1 } @a; # Copy
detaint_1_inp($_) foreach (@a); # In-place
####
sub detaint {
my $subref = sub { $_[0] =~ /^(.*)$/; $1 };
return map { &$subref($_) } @_ if (wantarray); # Copy for arrays
return &$subref($_[0]) if (defined(wantarray)); # Copy for scalar
$_ = &$subref($_) foreach (@_); # In-place
return;
}
####
sub apply_filter {
my $subref = shift;
return map { &$subref($_) } @_ if (wantarray); # Copy for arrays
return &$subref($_[0]) if (defined(wantarray)); # Copy for scalar
$_ = &$subref($_) foreach (@_); # In-place
return;
}
sub detaint {
return apply_filter(sub { $_[0] =~ /^(.*)$/; $1 }, @_);
}
# Refactored code leads to reuse!
sub left_pad {
my $padding = shift;
my $minlength = length($minlength);
return apply_filter(sub {
my $v = shift;
if (length($v) < $minlength) {
($padding . $v) =~ /(.{$minlength})$/;
$v = $1;
}
$v;
}, @_);
}