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; }, @_); }