Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Method to calculate array length

by wannymahoots (Novice)
on Nov 21, 2012 at 13:27 UTC ( #1004917=perlquestion: print w/ replies, xml ) Need Help??
wannymahoots has asked for the wisdom of the Perl Monks concerning the following question:

I'm attempting to define a method that will calculate the length of an array stored within an object, but am running up against an issue. In the example given below, when I call scaler on the deferenced array (which I would hope would return the array length?), the call behaves as if I'd attempted to call a method of the class called "scaler"? Clearly I'm misunderstanding something fundamental here and would really appreciate any clarification...
{ package Test; our $AUTOLOAD; sub new { my ($class) = @_; return bless {arr => [1,2,3,4]}, $class; } sub len { my ($self) = @_; scaler(@{$self->arr}); } sub DESTROY {} sub AUTOLOAD { my ($self) = @_; (my $f = $AUTOLOAD) =~ s/.+://; print "function \"$f\" called\n"; $self->{$f}; } } my $tmp = Test->new; print $tmp->len,"\n";
Output:
function "arr" called function "scaler" called Can't use string ("1") as a HASH ref while "strict refs" in use at ./t +est.pl line 25.

Comment on Method to calculate array length
Select or Download Code
Re: Method to calculate array length (scalar is scalar)
by Anonymous Monk on Nov 21, 2012 at 13:30 UTC

    scalar is scalar not scaler -- singulat, not climber

    haha, singular

      Amazing. For once, it is spelling and not coding that has let me down.
        Just a note: In this particular case, you could have found out that it was a spelling problem, since your AUTOLOAD was triggered. Of course this is not so clearly to see than having getting a "function not defined" error message. Partially for this reason, I refrain from using AUTOLOAD, unless I have very compelling reason to use it.


        -- 
        Ronald Fischer <ynnor@mm.st>
Re: Method to calculate array length
by toolic (Chancellor) on Nov 21, 2012 at 13:40 UTC
    Also, you can get more help from B::Lint
    perl -MO=Lint code.pl Nonexistant subroutine 'Test::scaler' called at code.pl z syntax OK

    and perlcritic

    perlcritic -1 code.pl Subroutine "scaler" is neither declared nor explicitly imported at lin +e 12, column 9. This might be a major bug. (Severity: 4)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1004917]
Approved by rovf
Front-paged by toolic
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2014-09-02 02:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (18 votes), past polls