<?xml version="1.0" encoding="windows-1252"?>
<node id="471590" title="Not Exactly a Hash Tutorial" created="2005-07-01 04:38:59" updated="2005-08-15 14:25:22">
<type id="956">
perltutorial</type>
<author id="442602">
planetscape</author>
<data>
<keywords>
<keyword rating="">
hash</keyword>
<keyword rating="">
tutorial</keyword>
<keyword rating="">
Data::Dumper</keyword>
<keyword rating="">
data_structure</keyword>
<keyword rating="">
reference</keyword>
<keyword rating="">
FakeHash</keyword>
</keywords>
<field name="doctext">
&lt;font size=-2&gt;
  &lt;p&gt;last updated: &lt;a href="#updates"&gt;2008-12-11&lt;/a&gt;&lt;/p&gt;
&lt;/font&gt;

&lt;small&gt;
&lt;p align="center"&gt;&lt;font color="#0080ff"&gt;&amp;#78;&lt;/font&gt;
 &lt;font color="#0084fa"&gt;o&lt;/font&gt;
 &lt;font color="#0089f5"&gt;&amp;#116;&lt;/font&gt;
 &lt;font color="#008ef0"&gt;&amp;nbsp;&lt;/font&gt;
 &lt;font color="#0092ec"&gt;E&lt;/font&gt;
 &lt;font color="#0097e7"&gt;x&lt;/font&gt; &lt;font color="#009ce2"&gt;&amp;#97;&lt;/font&gt;
 &lt;font color="#00a0de"&gt;&amp;#99;&lt;/font&gt; &lt;font color="#00a5d9"&gt;&amp;#116;&lt;/font&gt;
 &lt;font color="#00aad4"&gt;l&lt;/font&gt;
 &lt;font color="#00afcf"&gt;y&lt;/font&gt;
 &lt;font color="#00b3cb"&gt;&amp;nbsp;&lt;/font&gt; &lt;font color="#00b8c6"&gt;&amp;#97;&lt;/font&gt; 
 &lt;font color="#00bdc1"&gt;&amp;nbsp;&lt;/font&gt;
 &lt;font color="#00c1bd"&gt;&amp;#72;&lt;/font&gt;
 &lt;font color="#00c6b8"&gt;a&lt;/font&gt;
 &lt;font color="#00cbb3"&gt;&amp;#115;&lt;/font&gt; &lt;font color="#00cfaf"&gt;&amp;#104;&lt;/font&gt;
 &lt;font color="#00d4aa"&gt;&amp;nbsp;&lt;/font&gt;
 &lt;font color="#00d9a5"&gt;T&lt;/font&gt;
 &lt;font color="#00dea0"&gt;u&lt;/font&gt;
 &lt;font color="#00e29c"&gt;&amp;#116;&lt;/font&gt;
 &lt;font color="#00e797"&gt;o&lt;/font&gt;
 &lt;font color="#00ec92"&gt;r&lt;/font&gt;
 &lt;font color="#00f08e"&gt;i&lt;/font&gt;
 &lt;font color="#00f589"&gt;a&lt;/font&gt;
 &lt;font color="#00fa84"&gt;&amp;#108;&lt;/font&gt;
&lt;/p&gt;
&lt;/small&gt;

&lt;p&gt;&lt;strong&gt;Quick links:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
&lt;a href="#code"&gt;Code Illustrating Hashes and Related Syntax&lt;/a&gt;&lt;br /&gt;

&lt;blockquote&gt;
   &lt;br /&gt;&lt;a href="#assignment"&gt;Hash Assignment&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#access"&gt;Hash Element Access&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#exists"&gt;exists ( $hash{$key} )&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#keys"&gt;keys( %hash )&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#delete"&gt;delete ( $hash{key} )&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#values"&gt;values( %hash )&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#each"&gt;each( %hash )&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#inverse"&gt;Make an "Inverse" Hash&lt;/a&gt;
   &lt;br /&gt;&lt;a href="#expand"&gt;Let's Expand Our Real-World Example...&lt;/a&gt;
&lt;/blockquote&gt;

&lt;a href="#fakehash"&gt;Visualizing a Hash Structure with FakeHash&lt;/a&gt;&lt;br /&gt;
&lt;a href="#resources"&gt;A List of Hash Resources&lt;/a&gt;&lt;br /&gt;
&lt;a href="#updates"&gt;Updates&lt;/a&gt;&lt;br /&gt;
&lt;/p&gt;

&lt;hr /&gt;


&lt;a name="code"&gt;
&lt;h4&gt;Some Very Simple Code Illustrating Hashes and Related Syntax&lt;/h4&gt;
&lt;/a&gt;
&lt;readmore&gt;&lt;code&gt;
#! /usr/local/bin/perl -w
# myHash.pl
# these are very simplistic syntax examples;
# there's much more to know, so see the
# resources below!

use strict;
use warnings;

use Data::Dumper;
&lt;/code&gt;
&lt;a name="assignment"&gt;&lt;/a&gt;
&lt;code&gt;
# Hash Assignment
# In this case, a 
#   1  :  1     relationship
# key  =&gt; value
my %StateName = (
    AK =&gt; 'Alaska',
    AL =&gt; 'Alabama',
    AR =&gt; 'Arkansas',
    AZ =&gt; 'Arizona',
    CA =&gt; 'California',
    CO =&gt; 'Colorado',
    CT =&gt; 'Connecticut',
    DC =&gt; 'District Of Columbia',
    DE =&gt; 'Delaware',
    FL =&gt; 'Florida',
    GA =&gt; 'Georgia',
    HI =&gt; 'Hawaii',
    IA =&gt; 'Iowa',
    ID =&gt; 'Idaho',
    IL =&gt; 'Illinois',
    IN =&gt; 'Indiana',
    KS =&gt; 'Kansas',
    KY =&gt; 'Kentucky',
    LA =&gt; 'Louisiana',
    MA =&gt; 'Massachusetts',
    MD =&gt; 'Maryland',
    ME =&gt; 'Maine',
    MI =&gt; 'Michigan',
    MN =&gt; 'Minnesota',
    MO =&gt; 'Missouri',
    MS =&gt; 'Mississippi',
    MT =&gt; 'Montana',
    NC =&gt; 'North Carolina',
    ND =&gt; 'North Dakota',
    NE =&gt; 'Nebraska',
    NH =&gt; 'New Hampshire',
    NJ =&gt; 'New Jersey',
    NM =&gt; 'New Mexico',
    NV =&gt; 'Nevada',
    NY =&gt; 'New York',
    OH =&gt; 'Ohio',
    OK =&gt; 'Oklahoma',
    OR =&gt; 'Oregon',
    PA =&gt; 'Pennsylvania',
    RI =&gt; 'Rhode Island',
    SC =&gt; 'South Carolina',
    SD =&gt; 'South Dakota',
    TN =&gt; 'Tennessee',
    TX =&gt; 'Texas',
    UT =&gt; 'Utah',
    VA =&gt; 'Virginia',
    VT =&gt; 'Vermont',
    WA =&gt; 'Washington',
    WI =&gt; 'Wisconsin',
    WV =&gt; 'West Virginia',
    WY =&gt; 'Wyoming'
);


my $href = \%StateName;      # reference to the hash %StateName
print Dumper $href;	         # note the order will differ from that above
print "\n";


&lt;/code&gt;
&lt;a name="access"&gt;&lt;/a&gt;
&lt;code&gt;
# hash element access
my $State = 'SD';		          # planetscape's home state
my $Name = $StateName{$State};
print "planetscape lives in " . $Name . "\.\n\n";


&lt;/code&gt;
&lt;a name="exists"&gt;&lt;/a&gt;
&lt;code&gt;
# exists ( $hash{$key} )
$State = 'QC';               # Quebec, Canada
if (exists($StateName{$State})) {
	print "The abbreviation for $State is " . $StateName{$State} . "\.\n\n";
} else {
	print $State . " is not a state! (yet)\n\n";
}


&lt;/code&gt;
&lt;a name="keys"&gt;&lt;/a&gt;
&lt;code&gt;
# keys( %hash )
my $count = keys %StateName;
print "There are $count elements in the hash.\n\n";
foreach $State (keys(%StateName)) {
	print "State abbreviation is '$State'\n";
}
print "\n";


&lt;/code&gt;
&lt;a name="delete"&gt;&lt;/a&gt;
&lt;code&gt;
# delete ( $hash{key} )
delete($StateName{DC});      # DC is not actually a state,
			                 # it's a postal abbreviation


&lt;/code&gt;
&lt;a name="values"&gt;&lt;/a&gt;
&lt;code&gt;
# values( %hash )
$count = values %StateName;  # $count is one less since we deleted DC
print "There are $count elements in the hash.\n\n";
foreach $State (values(%StateName)) {
	print "State name is '$State'\n";
}
print "\n";


&lt;/code&gt;
&lt;a name="each"&gt;&lt;/a&gt;
&lt;code&gt;
# each( %hash )
while (my($key,$value)=each(%StateName)) {	 # there's lots more to know
	print "key='$key', value='$value'\n";	 # about "each" - see the
						                                      # resources below!
}
print "\n";


&lt;/code&gt;
&lt;a name="inverse"&gt;&lt;/a&gt;
&lt;code&gt;
# make an inverse hash
my %StateAbbreviation = reverse %StateName;

# exists ( $hash{$key} )
$State = 'Quebec';           # QC
if (exists($StateAbbreviation{$State})) {
	print "The abbreviation for $State is " . $StateAbbreviation{$State} . "\.\n\n";
} else {
	print $State . " is not a state! (yet)\n\n";
}
print "\n";


&lt;/code&gt;
&lt;a name="expand"&gt;&lt;/a&gt;
&lt;code&gt;
# let's expand our real-world example from a hash of States
# to a hash of postal abbreviations (not exhaustive)
my %PostalCode = %StateName;	# copy %StateName to %PostalCode
$PostalCode{AS} = 'American Samoa';
$PostalCode{DC} = 'District of Columbia';
$PostalCode{FM} = 'Federated States of Micronesia';
$PostalCode{GU} = 'Guam';
$PostalCode{MH} = 'Marshall Islands';
$PostalCode{MP} = 'Northern Mariana Islands';
$PostalCode{PW} = 'Palau';
$PostalCode{PR} = 'Puerto Rico';
$PostalCode{VI} = 'Virgin Islands';
$PostalCode{PW} = 'Palau';
# many more postal codes and abbreviations for the US and Canada 
# may be found here: http://www.usps.com/ncsc/lookups/usps_abbreviations.html
# and here: http://canadaonline.about.com/library/bl/blpabb.htm

foreach my $pc (keys(%PostalCode)) {
	print "PostalCode for '$PostalCode{$pc}' is '$pc'\n";
}

&lt;/code&gt;&lt;/readmore&gt;
&lt;hr /&gt;


&lt;a name="fakehash"&gt;
&lt;h4&gt;Visualizing a Hash Structure with FakeHash&lt;/h4&gt;
&lt;/a&gt;
&lt;p&gt;[cpan://FakeHash|FakeHash] is a module by Mark-Jason [Dominus] which was 
first announced [id://47536|here]. I have elaborated slightly on the 
[id://47536|code presented] in order to demonstrate some additional details such 
as setting drawing parameters. (More info on [cpan://FakeHash|FakeHash] can be 
found [http://perl.plover.com/FakeHash/FakeHash.pm|here].)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;code&gt;
use strict;
use warnings;

use FakeHash;

my %h = (
    When      =&gt; 1,
    in        =&gt; 2,
    the       =&gt; 3,
    course    =&gt; 4,
    of        =&gt; 5,
    human     =&gt; 6,
    events    =&gt; 7,
    it        =&gt; 8,
    becomes   =&gt; 9,
    necessary =&gt; 10,
    for       =&gt; 11,
    one       =&gt; 12,
    people    =&gt; 13,
);

open( my $FILEHANDLE, "&gt;FakeHashDrawing.txt" );
my $fake = FakeHash::DrawHash-&gt;new;

$fake-&gt;draw_param( 'BUCKET', [1.5, 0.75] );
$fake-&gt;draw_param( 'KVP' =&gt; [2.0, 0.75] );

while ( my ( $key, $value ) = each(%h) ) {
    $fake-&gt;store( $key, $value );
}

$fake-&gt;draw($FILEHANDLE);
close $FILEHANDLE;
&lt;/code&gt;

&lt;p&gt;This code produces the following output:&lt;/p&gt;
&lt;readmore&gt;
&lt;code&gt;
.PS
boxwid:=1.5; boxht:=0.75
B00: box 
boxwid:=1.5; boxht:=0.75
B01: box with .n at B00.s
circle at B01.c rad 0.1 filled
arrow from B01.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N0100: box "becomes" "9" "134720492145(17)"
boxwid:=1.5; boxht:=0.75
B02: box with .n at B01.s
circle at B02.c rad 0.1 filled
arrow from B02.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N0200: box "necessary" "10" "164114526854434(2)"
boxwid:=1.5; boxht:=0.75
B03: box with .n at B02.s
circle at B03.c rad 0.1 filled
arrow from B03.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N0300: box "human" "6" "131651875(3)"
boxwid:=1.5; boxht:=0.75
B04: box with .n at B03.s
boxwid:=1.5; boxht:=0.75
B05: box with .n at B04.s
boxwid:=1.5; boxht:=0.75
B06: box with .n at B05.s
circle at B06.c rad 0.1 filled
arrow from B06.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N0600: box "in" "2" "3686(6)"
boxwid:=2; boxht:=0.75
N0601: box "people" "13" "4647902198(22)"
boxwid:=2; boxht:=0.75
N0602: box "course" "4" "4135697990(6)"
boxwid:=1.5; boxht:=0.75
B07: box with .n at B06.s
boxwid:=1.5; boxht:=0.75
B08: box with .n at B07.s
circle at B08.c rad 0.1 filled
arrow from B08.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N0800: box "When" "1" "3344568(24)"
boxwid:=2; boxht:=0.75
N0801: box "one" "12" "128504(24)"
boxwid:=1.5; boxht:=0.75
B09: box with .n at B08.s
circle at B09.c rad 0.1 filled
arrow from B09.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N0900: box "events" "7" "4224378201(25)"
boxwid:=1.5; boxht:=0.75
B10: box with .n at B09.s
circle at B10.c rad 0.1 filled
arrow from B10.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N1000: box "of" "5" "3882(10)"
boxwid:=1.5; boxht:=0.75
B11: box with .n at B10.s
circle at B11.c rad 0.1 filled
arrow from B11.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N1100: box "the" "3" "133915(27)"
boxwid:=1.5; boxht:=0.75
B12: box with .n at B11.s
circle at B12.c rad 0.1 filled
arrow from B12.c right boxwid/2 + 0.2
boxwid:=2; boxht:=0.75
N1200: box "it" "8" "3692(12)"
boxwid:=2; boxht:=0.75
N1201: box "for" "11" "118444(12)"
boxwid:=1.5; boxht:=0.75
B13: box with .n at B12.s
boxwid:=1.5; boxht:=0.75
B14: box with .n at B13.s
boxwid:=1.5; boxht:=0.75
B15: box with .n at B14.s
.PE
&lt;/code&gt;
&lt;/readmore&gt;

&lt;p&gt;Once you have generated &lt;code&gt;FakeHashDrawing.txt&lt;/code&gt; with the above Perl 
code, you can convert it to PostScript with the following (under 
[http://www.cygwin.com/|Cygwin]/*nix):&lt;/p&gt;

&lt;code&gt;pic FakeHashDrawing.txt | groff -c -Tps &gt; FakeHashDrawing.ps&lt;/code&gt;

&lt;p&gt;&lt;a href="http://planetscape.perlmonk.org/FakeHash.png"&gt;View the Output&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(I then used [http://www.jasc.com/products/paintshoppro/|Jasc Paint Shop Pro 
8] to convert PostScript to [wp://PNG] for display purposes.)&lt;/p&gt;

&lt;p&gt;If you prefer a more "modern" standard such as [wp://SVG], you can use a 
utility such as [http://www.gnu.org/software/plotutils/plotutils.html|plotutils]' 
&lt;code&gt;pic2plot&lt;/code&gt; to convert from Unix &lt;code&gt;pic&lt;/code&gt; format to [wp://SVG] 
or any other of a wide variety of formats. For example:&lt;/p&gt;

&lt;code&gt;pic2plot -T svg FakeHashDrawing.txt &gt; FakeHashDrawing.svg&lt;/code&gt;

&lt;p&gt;Produces (on [http://www.cygwin.com/|Cygwin]):&lt;/p&gt;

&lt;readmore&gt;
&lt;code&gt;
&lt;?xml version="1.0" encoding="ISO-8859-1" standalone="no"?&gt;
&lt;!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd"&gt;
&lt;svg width="8in" height="8in" viewBox="0 0 1 1" preserveAspectRatio="none"&gt;
&lt;title&gt;SVG drawing&lt;/title&gt;
&lt;desc&gt;This was produced by version 4.1 of GNU libplot, a free library for exporting 2-D vector graphics.&lt;/desc&gt;
&lt;rect x="0" y="0" width="1" height="1" style="stroke:none;fill:white;"/&gt;
&lt;g transform="translate(0.058854,-0.14453) scale(1,-1) scale(0.11458) " xml:space="preserve" style="stroke:black;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10.433;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;fill:none;fill-rule:even-odd;fill-opacity:1;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size-adjust:none;letter-spacing:normal;word-spacing:normal;text-anchor:start;"&gt;
&lt;rect x="0" y="-0.375" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;rect x="0" y="-1.125" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-0.75" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-0.75" x2="1.7" y2="-0.75" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-0.725 1.7,-0.75 1.6,-0.775 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-1.125" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-0.56818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;becomes&lt;/text&gt;
&lt;text transform="translate(2.7,-0.75) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;9&lt;/text&gt;
&lt;text transform="translate(2.7,-0.93182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;134720492145(17)&lt;/text&gt;
&lt;rect x="0" y="-1.875" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-1.5" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-1.5" x2="1.7" y2="-1.5" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-1.475 1.7,-1.5 1.6,-1.525 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-1.875" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-1.3182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;necessary&lt;/text&gt;
&lt;text transform="translate(2.7,-1.5) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;10&lt;/text&gt;
&lt;text transform="translate(2.7,-1.6818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;164114526854434(2)&lt;/text&gt;
&lt;rect x="0" y="-2.625" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-2.25" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-2.25" x2="1.7" y2="-2.25" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-2.225 1.7,-2.25 1.6,-2.275 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-2.625" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-2.0682) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;human&lt;/text&gt;
&lt;text transform="translate(2.7,-2.25) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;6&lt;/text&gt;
&lt;text transform="translate(2.7,-2.4318) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;131651875(3)&lt;/text&gt;
&lt;rect x="0" y="-3.375" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;rect x="0" y="-4.125" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;rect x="0" y="-4.875" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-4.5" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-4.5" x2="1.7" y2="-4.5" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-4.475 1.7,-4.5 1.6,-4.525 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-4.875" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-4.3182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;in&lt;/text&gt;
&lt;text transform="translate(2.7,-4.5) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;2&lt;/text&gt;
&lt;text transform="translate(2.7,-4.6818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;3686(6)&lt;/text&gt;
&lt;rect x="3.7" y="-4.875" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(4.7,-4.3182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;people&lt;/text&gt;
&lt;text transform="translate(4.7,-4.5) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;13&lt;/text&gt;
&lt;text transform="translate(4.7,-4.6818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;4647902198(22)&lt;/text&gt;
&lt;rect x="5.7" y="-4.875" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(6.7,-4.3182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;course&lt;/text&gt;
&lt;text transform="translate(6.7,-4.5) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;4&lt;/text&gt;
&lt;text transform="translate(6.7,-4.6818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;4135697990(6)&lt;/text&gt;
&lt;rect x="0" y="-5.625" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;rect x="0" y="-6.375" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-6" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-6" x2="1.7" y2="-6" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-5.975 1.7,-6 1.6,-6.025 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-6.375" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-5.8182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;When&lt;/text&gt;
&lt;text transform="translate(2.7,-6) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;1&lt;/text&gt;
&lt;text transform="translate(2.7,-6.1818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;3344568(24)&lt;/text&gt;
&lt;rect x="3.7" y="-6.375" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(4.7,-5.8182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;one&lt;/text&gt;
&lt;text transform="translate(4.7,-6) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;12&lt;/text&gt;
&lt;text transform="translate(4.7,-6.1818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;128504(24)&lt;/text&gt;
&lt;rect x="0" y="-7.125" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-6.75" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-6.75" x2="1.7" y2="-6.75" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-6.725 1.7,-6.75 1.6,-6.775 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-7.125" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-6.5682) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;events&lt;/text&gt;
&lt;text transform="translate(2.7,-6.75) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;7&lt;/text&gt;
&lt;text transform="translate(2.7,-6.9318) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;4224378201(25)&lt;/text&gt;
&lt;rect x="0" y="-7.875" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-7.5" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-7.5" x2="1.7" y2="-7.5" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-7.475 1.7,-7.5 1.6,-7.525 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-7.875" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-7.3182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;of&lt;/text&gt;
&lt;text transform="translate(2.7,-7.5) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;5&lt;/text&gt;
&lt;text transform="translate(2.7,-7.6818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;3882(10)&lt;/text&gt;
&lt;rect x="0" y="-8.625" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-8.25" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-8.25" x2="1.7" y2="-8.25" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-8.225 1.7,-8.25 1.6,-8.275 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-8.625" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-8.0682) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;the&lt;/text&gt;
&lt;text transform="translate(2.7,-8.25) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;3&lt;/text&gt;
&lt;text transform="translate(2.7,-8.4318) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;133915(27)&lt;/text&gt;
&lt;rect x="0" y="-9.375" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;circle cx="0.75" cy="-9" r="0.1" style="stroke-width:0.010267;fill:gray;"/&gt;
&lt;line x1="0.75" y1="-9" x2="1.7" y2="-9" style="stroke-width:0.010267;"/&gt;
&lt;polygon points="1.6,-8.975 1.7,-9 1.6,-9.025 " style="stroke-width:0.010267;fill:black;"/&gt;
&lt;rect x="1.7" y="-9.375" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(2.7,-8.8182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;it&lt;/text&gt;
&lt;text transform="translate(2.7,-9) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;8&lt;/text&gt;
&lt;text transform="translate(2.7,-9.1818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;3692(12)&lt;/text&gt;
&lt;rect x="3.7" y="-9.375" width="2" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;text transform="translate(4.7,-8.8182) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;for&lt;/text&gt;
&lt;text transform="translate(4.7,-9) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;11&lt;/text&gt;
&lt;text transform="translate(4.7,-9.1818) scale(1,-1) " style="font-family:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-identifier:centerline;stroke:none;fill:black;"&gt;118444(12)&lt;/text&gt;
&lt;rect x="0" y="-10.125" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;rect x="0" y="-10.875" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;rect x="0" y="-11.625" width="1.5" height="0.75" style="stroke-width:0.010267;"/&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;/code&gt;
&lt;/readmore&gt;


&lt;p&gt;&lt;i&gt;&lt;b&gt;For more on visualizing complex data structures, please see [id://481746]&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;

&lt;hr /&gt;


&lt;a name="resources"&gt;
&lt;h4&gt;A List of Hash Resources&lt;/h4&gt;
&lt;/a&gt;
&lt;h5&gt;Online:&lt;/h5&gt;
&lt;blockquote&gt;
&lt;h6&gt;offsite:&lt;/h6&gt;
  &lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://learn.perl.org/library/beginning_perl/3145_Chap03.pdf"&gt;
  Chapter 3&lt;/a&gt; in &lt;a href="http://learn.perl.org/library/beginning_perl/"&gt;
  &lt;i&gt;Beginning Perl&lt;/i&gt;&lt;/a&gt; by Simon Cozens (&lt;a href="http://www.adobe.com/products/acrobat/readstep2.html/"&gt;PDF&lt;/a&gt;)&lt;/p&gt;
  &lt;p&gt;Chapter 5 of &lt;a href="http://ebb.org/PickingUpPerl/pickingUpPerl.pdf"&gt;&lt;i&gt;
  Picking Up Perl&lt;/i&gt;&lt;/a&gt; by &lt;a href="http://www.ebb.org/bkuhn"&gt;Bradley M. Kuhn&lt;/a&gt; 
  (&lt;a href="http://www.adobe.com/products/acrobat/readstep2.html/"&gt;PDF&lt;/a&gt;)&lt;/p&gt;
  &lt;p&gt;Section 2.3 in &lt;i&gt;&lt;a href="http://www.greglondon.com/iperl/pdf/iperl.pdf"&gt;
  Impatient Perl&lt;/a&gt; &lt;/i&gt;by 
  &lt;a href="http://www.greglondon.com/"&gt;Greg London&lt;/a&gt; (&lt;a href="http://www.adobe.com/products/acrobat/readstep2.html/"&gt;PDF&lt;/a&gt;)&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://www.steve.gb.com/perl/tutorial.html"&gt;Steve's place - Perl 
  Tutorial&lt;/a&gt;, by Steve Cook (&lt;a href="http://www.steve.gb.com/perl/downloads/tutorial.tar.gz"&gt;archive&lt;/a&gt;)&lt;/p&gt;
  &lt;blockquote&gt;
    &lt;ul&gt;
      &lt;li&gt;Lesson 2: &lt;a href="http://www.steve.gb.com/perl/lesson02.html"&gt;No-one 
      likes being type cast&lt;/a&gt; &lt;/li&gt;
      &lt;li&gt;Lesson 4: &lt;a href="http://www.steve.gb.com/perl/lesson04.html"&gt;Anyone 
      got some hash? Sorted&lt;/a&gt; &lt;/li&gt;
      &lt;li&gt;Lesson 7: &lt;a href="http://www.steve.gb.com/perl/lesson07.html"&gt;Arrays 
      of hashes of arrays of hashrefs&lt;/a&gt; &lt;/li&gt;
      &lt;li&gt;Lesson 15: &lt;a href="http://www.steve.gb.com/perl/lesson15.html"&gt;Tied 
      up in knots&lt;/a&gt; &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;&lt;a href="http://www.perltraining.com.au"&gt;Perl Training Australia&lt;/a&gt;'s 
  superlative materials:&lt;/p&gt;
  &lt;blockquote&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;i&gt;&lt;a href="http://perltraining.com.au/notes.html"&gt;
      Introduction to Perl&lt;/a&gt;&lt;/i&gt; (&lt;a href="http://www.adobe.com/products/acrobat/readstep2.html/"&gt;PDF&lt;/a&gt;)&lt;/li&gt;
      &lt;li&gt;&lt;i&gt;&lt;a href="http://perltraining.com.au/notes.html"&gt;
      Intermediate Perl&lt;/a&gt;&lt;/i&gt; (&lt;a href="http://www.adobe.com/products/acrobat/readstep2.html/"&gt;PDF&lt;/a&gt;)&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;&lt;a href="http://www.plover.com/~mjd/perl/context.html"&gt;What is Scalar 
  Context?&lt;/a&gt; by [Dominus]&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://www.plover.com/~mjd/perl/FAQs/references.html"&gt;Understand 
  References Today&lt;/a&gt; by [Dominus]&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://web.archive.org/web/20070218230223rn_1/gisle.aas.no/perl/illguts/#hv"&gt;Hashes&lt;/a&gt;, as explained in
  &lt;a href="http://web.archive.org/web/20070218230223rn_1/gisle.aas.no/perl/illguts/"&gt;PerlGuts Illustrated&lt;/a&gt;, by
  &lt;a href="http://gisle.aas.no/"&gt;Gisle Aas&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://www.perl.com"&gt;Perl.com&lt;/a&gt;:
  &lt;a href="http://www.perl.com/lpt/a/2002/10/01/hashes.html"&gt;How Hashes Really 
  Work&lt;/a&gt;, by Abhijit Menon-Sen&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://web.archive.org/web/20060826041456/http://www.5sigma.com/perl/effective_perl.pdf"&gt;Effective Perl: 
  Intermediate and Advanced Topics&lt;/a&gt; contains a wealth of information, not 
  limited to hashes, but also including several pages on
  &lt;a href="http://web.archive.org/web/20031011161713/http://www.effectiveperl.com/pegs/"&gt;
  Joseph N. Hall's PErl Graphical Structures (PEGS)&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;&lt;a href="http://www.perlarchive.com/___TLC/7026.shtml"&gt;Uri Guttman's tutorial on 
  AUTOVIVIFICATION&lt;/a&gt;&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;h6&gt;PerlMonks Tutorials:&lt;/h6&gt;
  &lt;blockquote&gt;
  &lt;p&gt;[id://861|the basic datatypes, three], by [root]&lt;/p&gt;
  &lt;p&gt;[id://125289|Hash Keys (strings or numbers?)], by [robot_tourist]&lt;/p&gt;
  &lt;p&gt;[id://494836|The Uniqueness of hashes], by [injunjoel]&lt;/p&gt;
  &lt;p&gt;[id://90647|Multidimensional Arrays], by [CharlesClarkson]&lt;/p&gt;
  &lt;p&gt;[id://137108|references], by [busunsl] &lt;/p&gt;
  &lt;p&gt;[id://69927|References quick reference], by [tye]&lt;/p&gt;
  &lt;p&gt;[id://8070|Object Serialization Basics], by [chromatic]&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;h6&gt;PerlMonks Categorized Questions and Answers:&lt;/h6&gt;
  &lt;blockquote&gt;
  &lt;p&gt;[id://1825|Hashes]&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;h6&gt;Other PerlMonks Nodes:&lt;/h6&gt;
  &lt;blockquote&gt;
  &lt;p&gt;[id://87227|Extracting array of hashes from data] by [nysus]&lt;/p&gt;
  &lt;p&gt;[id://224434|how to avoid mis-spelling hash keys?], by [Gorilla]&lt;/p&gt;
  &lt;p&gt;[id://345200|Perl Internals: Hashes], by [Kozz]&lt;/p&gt;
  &lt;p&gt;[id://439591|help with hashes], by [Anonymous Monk]&lt;/p&gt;
  &lt;p&gt;[id://445927|The Bad, the Ugly, and the Good of autovivification], by [tlm]&lt;/p&gt;
  &lt;p&gt;the third item on [pad://tye] is a hash intro&lt;/p&gt;
  &lt;p&gt;[id://567020|Autovivification trick], by [blazar]&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;h6&gt;perldocs:&lt;/h6&gt;
  &lt;blockquote&gt;
  &lt;p&gt;[doc://perlfaq4]: Data Manipulation - &lt;font size=-1&gt;Manipulating numbers, dates, strings, arrays, hashes, and miscellaneous data issues&lt;/font&gt;&lt;/p&gt;
  &lt;p&gt;[doc://perldata]&lt;/p&gt;
  &lt;p&gt;[doc://perlref]&lt;/p&gt;
  &lt;p&gt;[doc://perlreftut]&amp;nbsp;}&lt;/p&gt;
  &lt;p&gt;[doc://perldsc]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;i&gt;Thanks, [wfsp]!&lt;/i&gt;&lt;/p&gt;
  &lt;p&gt;[doc://perllol]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;h6&gt;Google:&lt;/h6&gt;
  &lt;blockquote&gt;
  &lt;p&gt;[google://perl hash tutorial|Obligatory Google]&lt;/p&gt;
  &lt;/blockquote&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h5&gt;Print:&lt;/h5&gt;
&lt;blockquote&gt;
  &lt;p&gt;Chapters 5 and 15 of &lt;i&gt;&lt;a href="http://www.oreilly.com/catalog/lperl3/index.html"&gt;
  Learning Perl&lt;/a&gt;&lt;/i&gt; by Randal L. Schwartz and Tom Phoenix&lt;/p&gt;
  &lt;p&gt;Pages 10-12 and 76-78 of &lt;i&gt;
  &lt;a href="http://www.oreilly.com/catalog/pperl3/index.html"&gt;Programming Perl&lt;/a&gt;&lt;/i&gt;, 
  3rd Ed., by Larry Wall, Tom Christiansen, Jon Orwant&lt;/p&gt;
  &lt;p&gt;Chapter 5 of the &lt;i&gt;
  &lt;a href="http://www.oreilly.com/catalog/cookbook/index.html"&gt;Perl Cookbook&lt;/a&gt;&lt;/i&gt;, 
  1st Ed., by Tom Christiansen, Nathan Torkington&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;


&lt;a name="updates"&gt;&lt;/a&gt;
&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; &lt;i&gt;This is only a beginning. I noticed a lack of material on hashes in the [Tutorials] section, and thought I could contribute something, even though it might be one step at a time...&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Update(s):&lt;/b&gt; Thanks to [wfsp] for pointing out... I forgot the perldocs!&lt;/p&gt;
&lt;blockquote&gt;&lt;font size=-2&gt;
  &lt;p&gt;2005-07-02: added [doc://perlfaq4], [doc://perlref], [id://125289|125289], [id://137108|137108], [id://69927|69927], [id://224434|224434]&lt;/p&gt;
  &lt;p&gt;2005-07-06: several links per section; too lazy to enumerate&lt;/p&gt;
  &lt;p&gt;2005-07-07: added [id://1825], [pad://tye], and some &lt;code&gt;code&lt;/code&gt;&lt;/p&gt;
  &lt;p&gt;2005-08-07: added info on [cpan://FakeHash|FakeHash], including code and [http://planetscape.perlmonk.org/FakeHash.png|graphics]&lt;/p&gt;
  &lt;p&gt;2005-09-12: fixed several broken links, brought to my attention by [Hue-Bond] &lt;i&gt;(Thanks!)&lt;/i&gt;&lt;/p&gt;
  &lt;p&gt;2005-12-18: added link to [id://494836|The Uniqueness of hashes], by [injunjoel]&lt;/p&gt;
  &lt;p&gt;2006-03-25: re-arranged code and references in more logical order; added 
  anchors; added &lt;code&gt;pic&lt;/code&gt; and [wp://SVG] output and info on &lt;code&gt;pic2plot&lt;/code&gt;&lt;/p&gt;
  &lt;p&gt;2006-03-26: added link to [id://8070|Object Serialization Basics], by [chromatic]&lt;/p&gt;
  &lt;p&gt;2006-08-13: added link to [id://567020|Autovivification trick], by [blazar]&lt;/p&gt;

  &lt;p&gt;2008-12-11: fixed several broken links, brought to my attention by [id://637526] &lt;i&gt;(Thanks!)&lt;/i&gt;; also fixed a few b0rked tags&lt;/p&gt;

&lt;/font&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;font color="#0080ff"&gt;p&lt;/font&gt; 
 &lt;font color="#008bf3"&gt;&amp;#108;&lt;/font&gt; 
 &lt;font color="#0097e7"&gt;&amp;#97;&lt;/font&gt; 
 &lt;font color="#00a2dc"&gt;n&lt;/font&gt;
 &lt;font color="#00aed0"&gt;&amp;#101;&lt;/font&gt; 
 &lt;font color="#00b9c5"&gt;t&lt;/font&gt; 
 &lt;font color="#00c5b9"&gt;s&lt;/font&gt; 
 &lt;font color="#00d0ae"&gt;c&lt;/font&gt; 
 &lt;font color="#00dca2"&gt;a&lt;/font&gt; 
 &lt;font color="#00e797"&gt;&amp;#112;&lt;/font&gt; 
 &lt;font color="#00f38b"&gt;e&lt;/font&gt; 
&lt;/p&gt;</field>
</data>
</node>
