Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^2: call subroutines via hash

by fortesque (Acolyte)
on Jan 04, 2006 at 21:54 UTC ( [id://521028]=note: print w/replies, xml ) Need Help??


in reply to Re: call subroutines via hash
in thread call subroutines via hash

Smokemachine:
your approach worked as well as Eric's. Now I'm really puzzled.

JWB

Replies are listed 'Best First'.
Re^3: call subroutines via hash
by swkronenfeld (Hermit) on Jan 04, 2006 at 22:40 UTC
    The above note by Errto explained why \@data works. As s?he said, it creates a reference to the array @data, and stores it in the scalar.

    Since you said you're confused by how both methods work, let me clear up eric256's method.

    $array_ref = [ ]; creates a new, empty array, and returns the reference to it. In this case, we assign it to $array_ref.
    $array2_ref = [1, 2, 3, 4]; creates a new array and initializes it with the values supplied. It returns the reference, which we once again store.
    $radius_ref = [@data] will create a new array initialized with the contents of @data.

    There's a really important distinction between using [@data] and \@data. They both create array references, but the method with the brackets creates a new array, while the slash method references your existing array. The example below should clear up any confusion you have.

    my @data = (1,2,3,4); my $existing_ref = \@data; my $new_ref = [@data]; $existing_ref->[0] = "a"; $new_ref->[2] = "c"; Now, @data contains (a,2,3,4) and $new_ref points to an array the contains (1,2,c,4)

    Hope that helped.
Re^3: call subroutines via hash
by Errto (Vicar) on Jan 04, 2006 at 22:27 UTC

    Hi fortesque,

    In your code it seems like you want the variable $radius_ref to contain a reference to the array @radius. And I understand why you might expect that simply assigning it like my $radius_ref = @radius; might do that for you, and you wouldn't be the only one. Assigning to a scalar variable is one example of what's called scalar context in Perl. And when you have an array in scalar context, like here, what you get is the length of the array (that is, the number of elements in it). So $radius_ref will contain the number of elements in the array @radius.

    Whereas \@radius will take a reference to the array, which is what you want.

    This is explained in the Arrays section of perlintro, and in more detail in perldata.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://521028]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (5)
As of 2024-04-18 13:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found