in reply to Re: Altering Package Subs and Running In To Problems
in thread Altering Package Subs and Running In To Problems

I dropped in here because I saw "Sybase", but:

You should probably use @ISA and SUPER when you want to override methods from existing modules. Something like:

package My::Db; use Sybase::DBlib; our @ISA=qw(Sybase::DBlib); # new() is only needed if you need to do additional # stuff - otherwise Sybase::DBlib's new() is called # automatically sub new { my $package = shift; my $dbh = $package::SUPER->new(@_); # do something with $dbh here .... return $dbh; } # Override dbnextrow() to allow ad-hoc processing sub dbnextrow { my $self = shift; # Call the real dbnextrow() my @row = $self::SUPER->dbnextrow(@_); # and now do some magic with @row before # returning it... .... return @row; }
If you do it this way the whole system becomes extensible - you'll note that I never mention Sybase::DBlib in the package itself - only in the @ISA - and this lets perl decide at run-time what methods to call based on the inheritance tree.

Michael

Replies are listed 'Best First'.
Re^3: Altering Package Subs and Running In To Problems
by aufflick (Deacon) on Nov 12, 2004 at 13:39 UTC
    That's true, but the author of Sybase::DBlib has said on a number of occasions that it is very hard to subclass for a number of reasons. This can be confirmed by trying!

    Apparently the latest version which either just got to CPAN or is just about to includes some changes which will make subclassing easier.

    So if all you want to do is, say, add a few methods - then something like I suggested is a good way to do it.

    In most situations your advice is, of course, correct.

      Err - I think you're confusing DBI and Sybase::DBlib...

      As I'm the author of Sybase::DBlib I suppose I should know :-)

      Michael

        Heh. Well, I wasn't confusing the two, but yes I suppose you should know!

        I'm sure I saw a mailing list message from you saying that SybaseDBlib was hard to subclass for unspecified reasons, but that newer versions would be better?

        Not that it matters...