in reply to Re^3: calling sub with object as param
in thread calling sub with object as param

Hello perlnewb4life, and welcome to the Monastery!

Anonymous Monk means that this:

sub querryDatabase() { my($inputData) = @_; ...

should be this:

sub querryDatabase() { my($self, $inputData) = @_; ...

because the first argument passed in to any method call is always an object reference. Here’s a contrived (and naïve) example:

use strict; use warnings; package Widget { use Moose; has 'ID' => ( is => 'rw', isa => 'Str', required => 1, ); sub inc_id { my ($self, $inc) = @_; my $id = $self->ID; my ($prefix, $suffix) = $id =~ /^([^\d]+)(\d+)$/; $self->ID( $prefix . ($suffix + $inc) ); } } my $gizmo = Widget->new( { ID => 'PM142' } ); print $gizmo->ID, "\n"; $gizmo->inc_id(5); print $gizmo->ID, "\n";

Output:

16:41 >perl 1366_SoPW.pl PM142 PM147 16:41 >

Note that the inc_id method receives two arguments, although only the second (in this case, 5) is passed explicitly in the method call $gizmo->inc_id(5). The first argument, a reference to the $gizmo object, is passed implicitly.

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^5: calling sub with object as param
by afoken (Chancellor) on Sep 03, 2015 at 19:27 UTC
    should be this:
    sub querryDatabase() { my($self, $inputData) = @_; ...

    And to make that really good, get rid of the useless and misleading empty prototype:

    sub querryDatabase { my($self, $inputData) = @_; ...

    To explain that: Method calls bypass prototype checks, so the prototype is useless. And the method expects one parameter (in addition to the implicit object parameter), so using the empty prototype suggesting that the method takes no parameters is misleading and may confuse you (or someone else) later.

    General rule of thumb for prototypes in Perl: Don't use them unless you really know what you are doing.

    See also: Far More than Everything You've Ever Wanted to Know about Prototypes in Perl -- by Tom Christiansen

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-)