package Business::CreditCard::Obscure; use strict; use warnings; use Sub::Exporter -setup => { exports => [ obscure => \&build_obscure ] }; sub build_obscure { my ( $class, $name, $arg ) = @_; $arg->{head} ||= 0; $arg->{tail} ||= -4; $arg->{replacement} ||= '*'; return sub { my $data = shift; substr( $data, $arg->{head}, $arg->{tail} ) =~ s/./$arg->{replacement}/g; return $data; } } 1;