in reply to Re^2: call subroutines via hash
in thread call subroutines via hash
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.
Hope that helped.
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.
|
---|
In Section
Seekers of Perl Wisdom