Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??

last updated: 2008-12-11

N o t   E x a c t l y   a   H a s h   T u t o r i a l

Quick links:

Code Illustrating Hashes and Related Syntax


Hash Assignment
Hash Element Access
exists ( $hash{$key} )
keys( %hash )
delete ( $hash{key} )
values( %hash )
each( %hash )
Make an "Inverse" Hash
Let's Expand Our Real-World Example...
Visualizing a Hash Structure with FakeHash
A List of Hash Resources
Updates


Some Very Simple Code Illustrating Hashes and Related Syntax

#! /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;
# Hash Assignment # In this case, a # 1 : 1 relationship # key => value my %StateName = ( AK => 'Alaska', AL => 'Alabama', AR => 'Arkansas', AZ => 'Arizona', CA => 'California', CO => 'Colorado', CT => 'Connecticut', DC => 'District Of Columbia', DE => 'Delaware', FL => 'Florida', GA => 'Georgia', HI => 'Hawaii', IA => 'Iowa', ID => 'Idaho', IL => 'Illinois', IN => 'Indiana', KS => 'Kansas', KY => 'Kentucky', LA => 'Louisiana', MA => 'Massachusetts', MD => 'Maryland', ME => 'Maine', MI => 'Michigan', MN => 'Minnesota', MO => 'Missouri', MS => 'Mississippi', MT => 'Montana', NC => 'North Carolina', ND => 'North Dakota', NE => 'Nebraska', NH => 'New Hampshire', NJ => 'New Jersey', NM => 'New Mexico', NV => 'Nevada', NY => 'New York', OH => 'Ohio', OK => 'Oklahoma', OR => 'Oregon', PA => 'Pennsylvania', RI => 'Rhode Island', SC => 'South Carolina', SD => 'South Dakota', TN => 'Tennessee', TX => 'Texas', UT => 'Utah', VA => 'Virginia', VT => 'Vermont', WA => 'Washington', WI => 'Wisconsin', WV => 'West Virginia', WY => 'Wyoming' ); my $href = \%StateName; # reference to the hash %StateName print Dumper $href; # note the order will differ from that + above print "\n";
# hash element access my $State = 'SD'; # planetscape's home state my $Name = $StateName{$State}; print "planetscape lives in " . $Name . "\.\n\n";
# 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"; }
# 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";
# delete ( $hash{key} ) delete($StateName{DC}); # DC is not actually a state, # it's a postal abbreviation
# 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";
# each( %hash ) while (my($key,$value)=each(%StateName)) { # there's lots more to +know print "key='$key', value='$value'\n"; # about "each" - see the # resour +ces below! } print "\n";
# 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{$Stat +e} . "\.\n\n"; } else { print $State . " is not a state! (yet)\n\n"; } print "\n";
# 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_abbreviatio +ns.html # and here: http://canadaonline.about.com/library/bl/blpabb.htm foreach my $pc (keys(%PostalCode)) { print "PostalCode for '$PostalCode{$pc}' is '$pc'\n"; }

Visualizing a Hash Structure with FakeHash

FakeHash is a module by Mark-Jason Dominus which was first announced here. I have elaborated slightly on the code presented in order to demonstrate some additional details such as setting drawing parameters. (More info on FakeHash can be found here.)

 

use strict; use warnings; use FakeHash; my %h = ( When => 1, in => 2, the => 3, course => 4, of => 5, human => 6, events => 7, it => 8, becomes => 9, necessary => 10, for => 11, one => 12, people => 13, ); open( my $FILEHANDLE, ">FakeHashDrawing.txt" ); my $fake = FakeHash::DrawHash->new; $fake->draw_param( 'BUCKET', [1.5, 0.75] ); $fake->draw_param( 'KVP' => [2.0, 0.75] ); while ( my ( $key, $value ) = each(%h) ) { $fake->store( $key, $value ); } $fake->draw($FILEHANDLE); close $FILEHANDLE;

This code produces the following output:

.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

Once you have generated FakeHashDrawing.txt with the above Perl code, you can convert it to PostScript with the following (under Cygwin/*nix):

pic FakeHashDrawing.txt | groff -c -Tps > FakeHashDrawing.ps

View the Output

(I then used Jasc Paint Shop Pro 8 to convert PostScript to PNG for display purposes.)

If you prefer a more "modern" standard such as SVG, you can use a utility such as plotutils' pic2plot to convert from Unix pic format to SVG or any other of a wide variety of formats. For example:

pic2plot -T svg FakeHashDrawing.txt > FakeHashDrawing.svg

Produces (on Cygwin):

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylabl +e.dtd"> <svg width="8in" height="8in" viewBox="0 0 1 1" preserveAspectRatio="n +one"> <title>SVG drawing</title> <desc>This was produced by version 4.1 of GNU libplot, a free library +for exporting 2-D vector graphics.</desc> <rect x="0" y="0" width="1" height="1" style="stroke:none;fill:white;" +/> <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-opac +ity:1;font-style:normal;font-variant:normal;font-weight:normal;font-s +tretch:normal;font-size-adjust:none;letter-spacing:normal;word-spacin +g:normal;text-anchor:start;"> <rect x="0" y="-0.375" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <rect x="0" y="-1.125" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-0.75" r="0.1" style="stroke-width:0.010267;fill +:gray;"/> <line x1="0.75" y1="-0.75" x2="1.7" y2="-0.75" style="stroke-width:0.0 +10267;"/> <polygon points="1.6,-0.725 1.7,-0.75 1.6,-0.775 " style="stroke-width +:0.010267;fill:black;"/> <rect x="1.7" y="-1.125" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-0.56818) scale(1,-1) " style="font-fam +ily:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;basel +ine-identifier:centerline;stroke:none;fill:black;">becomes</text> <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;">9</text> <text transform="translate(2.7,-0.93182) scale(1,-1) " style="font-fam +ily:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;basel +ine-identifier:centerline;stroke:none;fill:black;">134720492145(17)</ +text> <rect x="0" y="-1.875" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-1.5" r="0.1" style="stroke-width:0.010267;fill: +gray;"/> <line x1="0.75" y1="-1.5" x2="1.7" y2="-1.5" style="stroke-width:0.010 +267;"/> <polygon points="1.6,-1.475 1.7,-1.5 1.6,-1.525 " style="stroke-width: +0.010267;fill:black;"/> <rect x="1.7" y="-1.875" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-1.3182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">necessary</text> <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;">10</text> <text transform="translate(2.7,-1.6818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">164114526854434(2)< +/text> <rect x="0" y="-2.625" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-2.25" r="0.1" style="stroke-width:0.010267;fill +:gray;"/> <line x1="0.75" y1="-2.25" x2="1.7" y2="-2.25" style="stroke-width:0.0 +10267;"/> <polygon points="1.6,-2.225 1.7,-2.25 1.6,-2.275 " style="stroke-width +:0.010267;fill:black;"/> <rect x="1.7" y="-2.625" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-2.0682) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">human</text> <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;">6</text> <text transform="translate(2.7,-2.4318) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">131651875(3)</text> <rect x="0" y="-3.375" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <rect x="0" y="-4.125" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <rect x="0" y="-4.875" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-4.5" r="0.1" style="stroke-width:0.010267;fill: +gray;"/> <line x1="0.75" y1="-4.5" x2="1.7" y2="-4.5" style="stroke-width:0.010 +267;"/> <polygon points="1.6,-4.475 1.7,-4.5 1.6,-4.525 " style="stroke-width: +0.010267;fill:black;"/> <rect x="1.7" y="-4.875" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-4.3182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">in</text> <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;">2</text> <text transform="translate(2.7,-4.6818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">3686(6)</text> <rect x="3.7" y="-4.875" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(4.7,-4.3182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">people</text> <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;">13</text> <text transform="translate(4.7,-4.6818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">4647902198(22)</tex +t> <rect x="5.7" y="-4.875" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(6.7,-4.3182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">course</text> <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;">4</text> <text transform="translate(6.7,-4.6818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">4135697990(6)</text +> <rect x="0" y="-5.625" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <rect x="0" y="-6.375" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-6" r="0.1" style="stroke-width:0.010267;fill:gr +ay;"/> <line x1="0.75" y1="-6" x2="1.7" y2="-6" style="stroke-width:0.010267; +"/> <polygon points="1.6,-5.975 1.7,-6 1.6,-6.025 " style="stroke-width:0. +010267;fill:black;"/> <rect x="1.7" y="-6.375" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-5.8182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">When</text> <text transform="translate(2.7,-6) scale(1,-1) " style="font-family:'H +elvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-id +entifier:centerline;stroke:none;fill:black;">1</text> <text transform="translate(2.7,-6.1818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">3344568(24)</text> <rect x="3.7" y="-6.375" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(4.7,-5.8182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">one</text> <text transform="translate(4.7,-6) scale(1,-1) " style="font-family:'H +elvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-id +entifier:centerline;stroke:none;fill:black;">12</text> <text transform="translate(4.7,-6.1818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">128504(24)</text> <rect x="0" y="-7.125" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-6.75" r="0.1" style="stroke-width:0.010267;fill +:gray;"/> <line x1="0.75" y1="-6.75" x2="1.7" y2="-6.75" style="stroke-width:0.0 +10267;"/> <polygon points="1.6,-6.725 1.7,-6.75 1.6,-6.775 " style="stroke-width +:0.010267;fill:black;"/> <rect x="1.7" y="-7.125" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-6.5682) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">events</text> <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;">7</text> <text transform="translate(2.7,-6.9318) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">4224378201(25)</tex +t> <rect x="0" y="-7.875" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-7.5" r="0.1" style="stroke-width:0.010267;fill: +gray;"/> <line x1="0.75" y1="-7.5" x2="1.7" y2="-7.5" style="stroke-width:0.010 +267;"/> <polygon points="1.6,-7.475 1.7,-7.5 1.6,-7.525 " style="stroke-width: +0.010267;fill:black;"/> <rect x="1.7" y="-7.875" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-7.3182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">of</text> <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;">5</text> <text transform="translate(2.7,-7.6818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">3882(10)</text> <rect x="0" y="-8.625" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-8.25" r="0.1" style="stroke-width:0.010267;fill +:gray;"/> <line x1="0.75" y1="-8.25" x2="1.7" y2="-8.25" style="stroke-width:0.0 +10267;"/> <polygon points="1.6,-8.225 1.7,-8.25 1.6,-8.275 " style="stroke-width +:0.010267;fill:black;"/> <rect x="1.7" y="-8.625" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-8.0682) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">the</text> <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;">3</text> <text transform="translate(2.7,-8.4318) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">133915(27)</text> <rect x="0" y="-9.375" width="1.5" height="0.75" style="stroke-width:0 +.010267;"/> <circle cx="0.75" cy="-9" r="0.1" style="stroke-width:0.010267;fill:gr +ay;"/> <line x1="0.75" y1="-9" x2="1.7" y2="-9" style="stroke-width:0.010267; +"/> <polygon points="1.6,-8.975 1.7,-9 1.6,-9.025 " style="stroke-width:0. +010267;fill:black;"/> <rect x="1.7" y="-9.375" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(2.7,-8.8182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">it</text> <text transform="translate(2.7,-9) scale(1,-1) " style="font-family:'H +elvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-id +entifier:centerline;stroke:none;fill:black;">8</text> <text transform="translate(2.7,-9.1818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">3692(12)</text> <rect x="3.7" y="-9.375" width="2" height="0.75" style="stroke-width:0 +.010267;"/> <text transform="translate(4.7,-8.8182) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">for</text> <text transform="translate(4.7,-9) scale(1,-1) " style="font-family:'H +elvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseline-id +entifier:centerline;stroke:none;fill:black;">11</text> <text transform="translate(4.7,-9.1818) scale(1,-1) " style="font-fami +ly:'Helvetica',sans-serif;font-size:0.15152;text-anchor:middle;baseli +ne-identifier:centerline;stroke:none;fill:black;">118444(12)</text> <rect x="0" y="-10.125" width="1.5" height="0.75" style="stroke-width: +0.010267;"/> <rect x="0" y="-10.875" width="1.5" height="0.75" style="stroke-width: +0.010267;"/> <rect x="0" y="-11.625" width="1.5" height="0.75" style="stroke-width: +0.010267;"/> </g> </svg>

For more on visualizing complex data structures, please see Answer: How can I visualize my complex data structure?


A List of Hash Resources

Online:
offsite:

Chapter 3 in Beginning Perl by Simon Cozens (PDF)

Chapter 5 of Picking Up Perl by Bradley M. Kuhn (PDF)

Section 2.3 in Impatient Perl by Greg London (PDF)

Steve's place - Perl Tutorial, by Steve Cook (archive)

Perl Training Australia's superlative materials:

What is Scalar Context? by Dominus

Understand References Today by Dominus

Hashes, as explained in PerlGuts Illustrated, by Gisle Aas

Perl.com: How Hashes Really Work, by Abhijit Menon-Sen

Effective Perl: Intermediate and Advanced Topics contains a wealth of information, not limited to hashes, but also including several pages on Joseph N. Hall's PErl Graphical Structures (PEGS).

Uri Guttman's tutorial on AUTOVIVIFICATION

PerlMonks Tutorials:

the basic datatypes, three, by root

Hash Keys (strings or numbers?), by robot_tourist

The Uniqueness of hashes, by injunjoel

Multidimensional Arrays, by CharlesClarkson

references, by busunsl

References quick reference, by tye

Object Serialization Basics, by chromatic

PerlMonks Categorized Questions and Answers:

Hashes

Other PerlMonks Nodes:

Extracting array of hashes from data by nysus

how to avoid mis-spelling hash keys?, by Gorilla

Perl Internals: Hashes, by Kozz

help with hashes, by Anonymous Monk

The Bad, the Ugly, and the Good of autovivification, by tlm

the third item on tye's scratchpad is a hash intro

Autovivification trick, by blazar

perldocs:

perlfaq4: Data Manipulation - Manipulating numbers, dates, strings, arrays, hashes, and miscellaneous data issues

perldata

perlref

perlreftut }

perldsc    }Thanks, wfsp!

perllol     }

Google:

Obligatory Google

 

Print:

Chapters 5 and 15 of Learning Perl by Randal L. Schwartz and Tom Phoenix

Pages 10-12 and 76-78 of Programming Perl, 3rd Ed., by Larry Wall, Tom Christiansen, Jon Orwant

Chapter 5 of the Perl Cookbook, 1st Ed., by Tom Christiansen, Nathan Torkington


Update: 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...

Update(s): Thanks to wfsp for pointing out... I forgot the perldocs!

2005-07-02: added perlfaq4, perlref, 125289, 137108, 69927, 224434

2005-07-06: several links per section; too lazy to enumerate

2005-07-07: added hashes, tye's scratchpad, and some code

2005-08-07: added info on FakeHash, including code and graphics

2005-09-12: fixed several broken links, brought to my attention by Hue-Bond (Thanks!)

2005-12-18: added link to The Uniqueness of hashes, by injunjoel

2006-03-25: re-arranged code and references in more logical order; added anchors; added pic and SVG output and info on pic2plot

2006-03-26: added link to Object Serialization Basics, by chromatic

2006-08-13: added link to Autovivification trick, by blazar

2008-12-11: fixed several broken links, brought to my attention by pmonk4ever (Thanks!); also fixed a few b0rked tags

 

 

p l a n e t s c a p e


In reply to Not Exactly a Hash Tutorial by planetscape

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others making s'mores by the fire in the courtyard of the Monastery: (4)
    As of 2015-07-03 23:20 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









      Results (57 votes), past polls