Eric Lease Morgan wrote:
How do I manipulate array references?
In a package I'm writing I initialize an array reference (I think)
through DBI like this:
$self-{author_ids} = $dbh-selectall_arrayref($query);
This gets tricky because selectall_arrayref returns an reference to an
array. Each value of that array is a reference to an array as well.
$self-{author_ids} is a reference to an array whose elements are in
fact references to arrays (that contains scalars thank goodness).
@{$self-{author_ids}} is the array.
$#{$self-{author_ids}} is the number of elements in the array.
@{$self-{authors_ids}-[0]} is the first row of data (an array).
$#{$self-{authors_ids}-[0]} is the number of columsn in the first row
of data.
$self-{author_ids}-[0] is a reference to an array representing one row
of data.
$self-{author_ids}-[0]-[0] would be the first field of the first row
of data.
First of all, what sort of foreach loop can I write to iterate through
the contents of $self-{author_ids}?
foreach $i (0..$#{$self-{authors_ids}}) {
foreach $j (0..$#{$self-{authors_ids}-[$i]}) {
print $self-{authors_ids}-[$i]-[$j];
}
print \n;
}
Second, how do I undefine the value of $self-{author_ids}?
$self-{author_ids} = undef;
Third, if I have a list of integers, how to I assign the items in this
list to $self-{author_ids}?
$self-{author_ids}-[0] = 1;
$self-{author_ids}-[1] = 2;
$self-{author_ids}-[2] = 3;
or
$self-{author_ids} = [1, 2, 3];
Or if you want something similar to what selectall_arrayref() is producing:
$self-{author_ids} = [ [1,2,3], [3,7,9], [2,8,4]];
Which could be printed like so:
foreach $i (0..$#{$self-{authors_ids}}) {
foreach $j (0..$#{$self-{authors_ids}-[$i]}) {
print $self-{authors_ids}-[$i]-[$j];
}
print \n;
}
I would strongly recommend adding quotation marks to {authors_ids} so
that it is {'authors_ids'} or defining it as a constant. The only
reason why {authors_ids} is equivalent to {'authors_ids'} is because
PERL is converting it to a constant on the fly for you. If you
accidentally picked a name that was already a constant in your namespace
you might end up with results that are hard to debug (imagine if a
module put a constant in your name space that you didn't know about).
--
Michael McDonnell, GCIA
Winterstorm Solutions, Inc.
[EMAIL PROTECTED]