From: Tels Date: Thu, 29 Dec 2005 18:01:42 +0000 (+0100) Subject: $a = \$a oddity X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=91ee910908135fa548f2069df82ad67a70375e02;p=p5sagit%2Fp5-mst-13.2.git $a = \$a oddity Message-Id: <200512291802.00742@bloodgate.com> plus trim some whitespace p4raw-id: //depot/perl@26528 --- diff --git a/pod/perlreftut.pod b/pod/perlreftut.pod index e55e4d5..82ad80e 100644 --- a/pod/perlreftut.pod +++ b/pod/perlreftut.pod @@ -20,7 +20,7 @@ Fortunately, you only need to know 10% of what's in the main page to get One problem that came up all the time in Perl 4 was how to represent a hash whose values were lists. Perl 4 had hashes, of course, but the -values had to be scalars; they couldn't be lists. +values had to be scalars; they couldn't be lists. Why would you want a hash of lists? Let's take a simple example: You have a file of city and country names, like this: @@ -101,6 +101,7 @@ reference to that variable. $aref = \@array; # $aref now holds a reference to @array $href = \%hash; # $href now holds a reference to %hash + $sref = \$scalar; # $sref now holds a reference to $scalar Once the reference is stored in a variable like $aref or $href, you can copy it or store it just the same as any other scalar value: @@ -122,10 +123,10 @@ C<[ ITEMS ]> makes a new, anonymous array, and returns a reference to that array. C<{ ITEMS }> makes a new, anonymous hash, and returns a reference to that hash. - $aref = [ 1, "foo", undef, 13 ]; + $aref = [ 1, "foo", undef, 13 ]; # $aref now holds a reference to an array - $href = { APR => 4, AUG => 8 }; + $href = { APR => 4, AUG => 8 }; # $href now holds a reference to a hash @@ -267,7 +268,7 @@ two-dimensional array; you can write C<< $a[ROW]->[COLUMN] >> to get or set the element in any row and any column of the array. The notation still looks a little cumbersome, so there's one more -abbreviation: +abbreviation: =head2 Arrow Rule @@ -314,7 +315,7 @@ structure will look like this: %table - +-------+---+ + +-------+---+ | | | +-----------+--------+ |Germany| *---->| Frankfurt | Berlin | | | | +-----------+--------+ @@ -381,7 +382,7 @@ C<{$table{$country}}>. The C adds a city name to the end of the referred-to array. There's one fine point I skipped. Line 5 is unnecessary, and we can -get rid of it. +get rid of it. 2 while (<>) { 3 chomp; @@ -436,11 +437,11 @@ the habit of always including the curly brackets. This doesn't copy the underlying array: - $aref2 = $aref1; + $aref2 = $aref1; -You get two references to the same array. If you modify +You get two references to the same array. If you modify C<< $aref1->[23] >> and then look at -C<< $aref2->[23] >> you'll see the change. +C<< $aref2->[23] >> you'll see the change. To copy the array, use @@ -454,14 +455,14 @@ Similarly, to copy an anonymous hash, you can use $href2 = {%{$href1}}; -=item * +=item * To see if a variable contains a reference, use the C function. It returns true if its argument is a reference. Actually it's a little better than that: It returns C for hash references and C for array references. -=item * +=item * If you try to use a reference like a string, you get strings like @@ -503,7 +504,7 @@ to do with references. Author: Mark Jason Dominus, Plover Systems (C) This article originally appeared in I -( http://www.tpj.com/ ) volume 3, #2. Reprinted with permission. +( http://www.tpj.com/ ) volume 3, #2. Reprinted with permission. The original title was I.