nmvega has asked for the wisdom of the Perl Monks concerning the following question:

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

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"; push @tableCellData, "foo"; ############################################################ # Dynamically expand each anonymous array so that each has # two elements. ############################################################ $tableCellData[0][0] = "0,0"; $tableCellData[0]1 = "0,1"; $tableCellData1[0] = "1,0"; $tableCellData11 = "1,1"; ############################################################ # At this point, at run-time the following (test) line will # print "1,0" (literally). ############################################################ print "$tableCellData1[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, ("$tableCellData1[0]\n"); push @table, ("$tableCellData11\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's 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 xy.

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. For example:
$tableCellData1[0] = "hereIsAnUpdate";
should be reflected on the next "print" statement.

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

push @table, ("$tableCellDataxy"); ^^^^^^^^^^^^^^^^^^^^
That is the line where I need the tip.

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 much appreciated.

Thanks In Advance & Regards,

Noel Milton Vega

Replies are listed 'Best First'.
Re: Address of a specific element: an Array containing Array References ...
by ccn (Vicar) on Oct 30, 2008 at 20:56 UTC

    use references

    #!/usr/bin/perl -- use strict; my @table; my @tableCellData; $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]; push @table, \$tableCellData[0][1]; push @table, \$tableCellData[1][0]; push @table, \$tableCellData[1][1]; print $$_,"\n" for @table; $tableCellData[0][1] = 'foo'; print "----\n"; print $$_,"\n" for @table;

    prints

    0,0 0,1 1,0 1,1 ---- 0,0 foo 1,0 1,1

    P.S. Your posts will be more readable if you read Markup in the Monastery