Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

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
Node Status?
node history
Node Type: perlquestion [id://1004917]
Approved by rovf
Front-paged by toolic
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (9)
As of 2017-02-25 17:41 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (366 votes). Check out past polls.