Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

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";
function "arr" called function "scaler" called Can't use string ("1") as a HASH ref while "strict refs" in use at ./t 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 <>
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 Nonexistant subroutine 'Test::scaler' called at z syntax OK

    and perlcritic

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

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (16)
As of 2014-07-10 17:19 GMT
Find Nodes?
    Voting Booth?

    When choosing user names for websites, I prefer to use:

    Results (214 votes), past polls