package My::Class;
use vars qw( $VERSION );
BEGIN { $VERSION= 1.001 }
package My::Class::_internal;
sub My::Class::new {
my $self= bless {}, "My::Class::_object";
#...
return $self;
}
sub utilityFunction {
my $self= shift @_;
# ...
}
sub My::Class::_object::method {
my $self= shift @_;
# ...
utilityFunction( $self, @args );
# ...
}
####
# Calling a class method via an object:
my $obj2= $obj1->new();
# Calling an object method via the class name:
my $ret= My::Class->method()
# Using my utility function:
$obj->utilityFunction();
##
##
*My::Class::_object::new= \&My::Class::new;
##
##
package My::Class;
use vars qw( $VERSION );
BEGIN { $VERSION= 1.001 }
# Following line moved down to increase robustness:
## My::Class::_internal->import( ":DEFAULT" );
package My::Class::_internal;
require Exporter;
use vars qw( @EXPORT_OK );
BEGIN {
*import= \&Exporter::import;
@EXPORT_OK= qw( new method );
}
sub utilityFunction {
my $self= shift @_;
# ...
}
sub new {
my $class= shift @_;
my $proto;
$class= ref( $proto= $class ) if ref $class;
my $self= bless {}, $class;
#...
return $self;
}
sub method {
my $self= shift @_;
# ...
utilityFunction( $self, @args );
# ...
}
package My::Class;
My::Class::_internal->import( ":DEFAULT" );
##
##
package My::Class;
use My::Class::_internal;