But it looks like I can't replace that piece of data by modifying the original array.
Of course you can, but you must not destroy the internal reference of the array slot [0] to the scalar originally stored in it. If you do so, you have no access to that scalar any longer via $a[0].
Change @a = ('a','b','c') to pop @a; @a[0..2] = qw(a b c); and things will work fine.
In the former case, 3 new scalars are being placed into the array slots, while in the latter case, the old scalars are being modified.
#!/usr/bin/perl -w
use strict;
print "--------Trying with arrays-------\n";
my @a = (0, 1, 2, 3);
my $ar = \@a; # Array reference
my $air = \$a[0]; # Reference to member of an array
print "Define array >@a<\nCreate a reference to \$a[0]\n";
print "array ref: >@$ar< \n";
print "array index ref: >$$air<\n";
pop @a;
@a[0..2] = qw(a b c);
print "Change array to >@a<\n";
print "array ref: >@$ar< \n";
print "array index ref: >$$air<\n"; # <--- I'd like to get "a" here
__END__
--------Trying with arrays-------
Define array >0 1 2 3<
Create a reference to $a[0]
array ref: >0 1 2 3<
array index ref: >0<
Change array to >a b c<
array ref: >a b c<
array index ref: >a<
Your misunderstanding is that you think Perl works like C, i.e. that references directly point to the memory locations where the actual data is stored. This is not how Perl works.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|