Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > Address of a specific element: an Array containing Array References...

Reply
Thread Tools

Address of a specific element: an Array containing Array References...

 
 
nmvega
Guest
Posts: n/a
 
      10-30-2008
Friends:

I have a syntax question, and I have put together this contrived
example (with
running comments), to demonstrate the line of code I need adjusted.
Sorry
for the verbosity.

################################################## ############
# @tableCellData = will be used to store 2 anonymous array
references.
# @table = will be used to store addresses of array *elements*
(not of arrays).
################################################## ############
my (@table, @tableCellData);

################################################## ###
# Insert 2 anonymous array references into @table.
# This essentially creates a 2D table, with 2 rows / 0 columns.
################################################## ###
push @tableCellData, ["foo"]; # use of "foo" twice in a row is ok
(it's arbitrary).
push @tableCellData, ["foo"]; # use of "foo" twice in a row is ok
(it's arbitrary).


################################################## ################
# Dynamically expand each anonymous array so that each has two
elements.

################################################## ################
$tableCellData[0][0] = "0,0";
$tableCellData[0][1] = "0,1";
$tableCellData[1][0] = "1,0";
$tableCellData[1][1] = "1,1";

################################################## ##############
# At this point, at run-time the following (test) line will print
"1,0" (literally).
################################################## ##############
print "$tableCellData[1][0]\n";

################################################## ########
# Next, we pouplate the @table array with the both elements of
the first
# anonymous array (created above), and also with the both
elements of
# the second anonymous array (also created above).
################################################## ########
push @table, ("$tableCellData[0][0]\n");
push @table, ("$tableCellData[0][1]\n");
push @table, ("$tableCellData[1][0]\n");
push @table, ("$tableCellData[1][1]\n");

################################################## ########
# Thus, at this point, at run-time the following (test) line will
print:
# "0,0" "0,1" "1,0" "1,1" each on their own line.
################################################## ########
print "@table\n";

Everything in this contrived example works fine up to this point! In
fact, again
my question (up next) is not about debugging but, rather, about
syntax. Here
is the question:

As we can see from the above "print" statement, the four "push"
statements
before it, inserted the *CONTENT* of the anonymous array element
indexed
(i.e. referenced/positioned) at [x][y].

But what I need to do instead, is to insert the *ADDRESS* of that
array *ELEMENT* instead. The reason (if curious) is that each time I
execute
statement:

print "@table\n";

it's output should dynamically change as I update individual elements
of the
two anonymous arrays contained in the named array @tableCellData ...
(e.g. $tableCellData[1][1] = "hereIsAnUpdate"; <-- would be an
update that
should be reflected on the next "print" statement.).

Thus it's only a slight modification that I seek to the 2nd argument
of this
statement (an extra $, @, \, etc., -- but I can't quite get it right):

push @table, ("$tableCellData[x][y]");
^^^^^^^^^^^^^^^^^^^^^^
That is the line where I need the tip.

A general way to ask this question is this...
Given access to an array of anonymous array references (such as
@tableCellData),
what is the syntax to get the ADDRESS of a specific element of a
specific anonymous
array within it?

Note: There are multiple ways to do things in PERL, however I'm
seeking this
particular way, so sustained focus (to the slight modification I seek)
would be
appreciated.

Thanks In Advance & Regards,
Noel Milton Vega
 
Reply With Quote
 
 
 
 
xhoster@gmail.com
Guest
Posts: n/a
 
      10-30-2008
nmvega <(E-Mail Removed)> wrote:
> Friends:
>
>
> ################################################## ################
> $tableCellData[0][0] = "0,0";
> $tableCellData[0][1] = "0,1";
> $tableCellData[1][0] = "1,0";
> $tableCellData[1][1] = "1,1";
>


> push @table, ("$tableCellData[0][0]\n");
> push @table, ("$tableCellData[0][1]\n");
> push @table, ("$tableCellData[1][0]\n");
> push @table, ("$tableCellData[1][1]\n");


First, the double-quote interpolation creates a copy. Then,
the push creates another copy. So you have two levels of problem.

>

....
>
> Everything in this contrived example works fine up to this point! In
> fact, again
> my question (up next) is not about debugging but, rather, about
> syntax. Here
> is the question:
>

....
>
> But what I need to do instead, is to insert the *ADDRESS* of that
> array *ELEMENT* instead. The reason (if curious) is that each time I
> execute
> statement:
>
> print "@table\n";



>
> it's output should dynamically change as I update individual elements
> of the
> two anonymous arrays contained in the named array @tableCellData ...
> (e.g. $tableCellData[1][1] = "hereIsAnUpdate"; <-- would be an
> update that
> should be reflected on the next "print" statement.).
>
> Thus it's only a slight modification that I seek to the 2nd argument
> of this
> statement (an extra $, @, \, etc., -- but I can't quite get it right):
>
> push @table, ("$tableCellData[x][y]");


You could push the reference,

push @table, \$tableCellData[x][y];

But then print @table would print stringified references, because it
wouldn't automatically dereference.

You could use push_aliases from the module Array::Splice to circumvent this
by pushing aliases rather than references. But you would have to drop the
double quotes, because they would break the alias.

You could create some kind of tied array that both has the push_aliases
functionality and will automatically add a \n to the end of fetched
strings, but that seems more of a problem than a solution.

Xho

--
-------------------- http://NewsReader.Com/ --------------------
The costs of publication of this article were defrayed in part by the
payment of page charges. This article must therefore be hereby marked
advertisement in accordance with 18 U.S.C. Section 1734 solely to indicate
this fact.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Delete lines containing a specific word Francesco Pietra Python 3 01-07-2008 12:43 PM
Re: Delete lines containing a specific word Francesco Pietra Python 6 01-07-2008 03:57 AM
Re: Delete lines containing a specific word Matt Nordhoff Python 1 01-06-2008 07:15 PM
Fwd: Delete lines containing a specific word Francesco Pietra Python 0 01-06-2008 05:44 PM
Selecting directories containing specific fileglobs Eden Cardim Perl Misc 11 03-13-2006 04:42 PM



Advertisments