Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

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.

Replies are listed 'Best First'.
Re: Method to calculate array length
by toolic (Bishop) 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)
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 <>

Log In?

What's my password?
Create A New User
Domain Nodelet?
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 taking refuge in the Monastery: (1)
As of 2021-12-04 15:55 GMT
Find Nodes?
    Voting Booth?
    R or B?

    Results (30 votes). Check out past polls.