http://qs321.pair.com?node_id=568631


in reply to RFC: Business::CreditCard::Obscure

I think you're not following OOP too close. I would change it to something like this (untested):

sub new { my ($class, %parameters) = @_; my $self = {}; # here we check required parameters, to croak() them. since we are + using # OOP, we *need* to ensure this object will be complete to perform + whatever # operations, avoiding coupling. foreach (qw(cardnum)) { # maybe we have other required parameters croak "Required parameter '$_' not found" unless exists $parameters{$_}; } # now we set defaults for not obligatory parameters $self->{'tail'} = $parameters{'tail'} || -4; $self->{'head'} = $parameters{'head'} || 0; $self->{'replacement'} = $parameters{'replacement'} || "*"; } sub obscure { my ($self) = @_; my $obscured = substr($self->{'cardnum'}, $self->{'head'}, $self->{'tail'} ) =~ s/./$self->{'replacement'}/g; return $obscured; }

Hope this helps.

Igor 'izut' Sutton
your code, your rules.

Replies are listed 'Best First'.
Re^2: RFC: Business::CreditCard::Obscure
by kwaping (Priest) on Aug 21, 2006 at 18:16 UTC
    I understand what you're saying and appreciate the comment. There is something you may be overlooking, though. I would like the user to have the choice of either calling new then obscure, or just going straight to Business::CreditCard::Obscure->obscure(). That's why I have the extra goodies inside that method. The constructor stuff in the new method was mostly just for user convenience to suit their preferred coding style. I'm aiming for maximum effective flexibility.

    ---
    It's all fine and dandy until someone has to look at the code.

      I could use the module like this:

      my $obscure = Business::CreditCard::Obscure->new(cardnum => '123456789 +012')->obscure();

      Since it is very specific, why don't you write your module to export a function, like this:

      use Business::CreditCard::Obscure qw(obscure); my $obscure = obscure(cardnum = '123456789012');

      Igor 'izut' Sutton
      your code, your rules.