Not always, but mostly I do. Whether using named params:
my $obj = Module->new(log => $obj, arg1 => $arg1);
or, positional (in this case, I typically have the log obj as the first parameter):
my $obj = Module->new($log, $arg1, $arg2);
...and sometimes, I'll have the first arg as $self, then the log obj, then named params after that:
my $obj = Module->new($log, %args);
The new() method would look something like this internally in that case:
sub new {
my $self = shift;
my $log_obj = shift;
my %args = @_;
# do stuff
}
You can also call the class method within your new() method, and stash it inside the object:
sub new {
my $self = bless {}, shift;
$self->{log} = Library->log()->child('This::Module::Name');
my $log = $self->_log()->child('new');
}
sub foo {
my $self = shift;
my $log = $self->_log()->child('foo');
# do fooish type stuff
}
sub _log {
return shift->{log};
}
|