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