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

I think the OP isn't handling the class name as the first parameter in the method.

Replies are listed 'Best First'.
Re^3: calling sub with object as param
by perlnewb4life (Initiate) on Sep 02, 2015 at 10:40 UTC
    hello, thank you for your quick response , can you please give some sample code so that i can better understand what you mean ? i am just starting to learn perl.

      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,

        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". ;-)