in reply to Re: Private Methods Meditation
in thread Private Methods Meditation

Perhaps just

sub method2 { my $self = shift; _method1( $self ); }
or am I missing something really obvious in this example ?

Or for better general safety, mark the privates to make their names unique.

package Foo; sub _F_method1 { print "Foo::_method\n"; } sub method2 { my $self = shift; $self->_F_method1; } package Foo::Bar; @ISA = qw( Foo ); sub _F_B_method1 { print "Foo::Bar::_method\n"; } package main; my $foobar = Foo::Bar->new; $foobar->method2;

update: s/exclusive/unique/

Replies are listed 'Best First'.
Re^3: Private Methods Meditation
by hardburn (Abbot) on Jul 19, 2004 at 12:47 UTC
    sub method2 { my $self = shift; _method1( $self ); }

    or am I missing something really obvious in this example ?

    Yes. If you don't override _method1 in the subclass, nothing will be called.

    ----
    send money to your kernel via the boot loader.. This and more wisdom available from Markov Hardburn.

        Let's extend the example a little. What if _method1 isn't defined, but is AUTOLOAD'ed instead? This isn't an unreasonable thing. So far, so good.

        Now, let's say that the Foo class inherits from some CPAN module. This is a very common thing. Let's say we're inheriting from CGI::Application.

        Now, let's say that CGI::Application adds a _method1() in the next version. Uh-oh. Your code breaks in very mysterious ways.

        What if CGI::Application adds dependence on AUTOLOAD in the next version. Uh-oh. Your code breaks again, but in even _MORE_ mysterious ways. (Cause it's not your code that broke, but it sure looks like it!)

        Perl6 fixes most (but not all) of these issues, which is a "Good Thing"™

        ------
        We are the carpenters and bricklayers of the Information Age.

        Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

        I shouldn't have to say this, but any code, unless otherwise stated, is untested

        So what happens when the method needs to access the class data?

        ----
        send money to your kernel via the boot loader.. This and more wisdom available from Markov Hardburn.