#!/usr/bin/perl
# Perl Assignment - Hash of Hashes
# Bill Davern
# Assignment 8
# Teams using a Hash of Hashes
# Sports Team Year Owner Captain Champions Notes
# Justice Society 1940 DC Hawkman
# Justice League 1960 DC Superman
# Fantastic Four 1961 Marvel Mr. Fantastic
# Avengers 1963 Marvel Captain America
# X-Men 1963 Marvel Professor X
# I have created the following array:
@teams = ( "Boston Bruins" , "New England Patriots" , "USA Hockey" , "Boston Celtics" , "Boston Redsox" ) ;
# and the following Hash of Hashes:
%myTeams = ( "Boston Bruins" => { year => 2011 ,
owner => "J. Jacups" ,
captain => "Zdeno Charra" ,
champs => "Yes" ,
notes => "More of a gang then a team!" ,
} ,
"New England Patriots" => { year => 2018 ,
owner => "Kraft" ,
captain => "Tom Brady" ,
champs => "Yes" ,
notes => "Best Comeback Ever!" ,
} ,
"USA Hockey" => { year => 1980 ,
owner => "USA Hockey" ,
captain => "Mike Eruzione" ,
champs => "Yes" ,
notes => "Greatest Sporting event EVER!" ,
} ,
"Boston Redsox" => { year => 2007 ,
owner => "John Henry" ,
captain => "Jason Varitek" ,
champs => "Yes" ,
notes => "Can you say Sweep" ,
} ,
"Boston Celtics" => { year => 2008 ,
owner => "Wic Grousbeck" ,
captain => "Paul Pierce" ,
champs => "Yes" ,
notes => "Banner 17" ,
} ,
) ;
# To print out sorted Team information in the Hash of Hashes (ascending order):
print ( "\n \n My Team - sorted by Team Name ascending:\n \n " ) ;
printf ( "%-20s \t %-6i \t %-15s \t %-25s \t %-5s \t %-50s \n " , $teamName , $year , $owner , $captain , $champs , $notes ) ;
@sortedKeys = sort ( @teams ) ;
for $teamName ( @sortedKeys ) {
$year = $myTeams { $teamName } { 'year' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$captain = $myTeams { $teamName } { 'captain' } ;
$champs = $myTeams { $teamName } { 'champs' } ;
$notes = $myTeams { $teamName } { 'notes' } ;
printf ( "%-20s \t %-6i \t %-10s \t %-25s \t %-5s \t %-50s \n " , $teamName , $year , $owner , $captain , $champs , $notes ) ; }
# To print out sorted Team information in the Hash of Hashes (descending order):
print ( "\n \M y Team - sorted by Team Name decending:\n \n " ) ;
printf ( "%-20s \t %-6s \t %-10s \t %-25s \t %-5s \t %-50s \t \n " , "Team" , "Year" , "Owner" , "Captain" , "Champions" , "Notes" ) ;
@reverseKeys = reverse ( @sortedKeys ) ;
for $teamName ( @reverseKeys ) {
$year = $myTeams { $teamName } { 'year' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$captain = $myTeams { $teamName } { 'captain' } ;
$champs = $myTeams { $teamName } { 'champs' } ;
$notes = $myTeams { $teamName } { 'notes' } ;
printf ( "%-20s \t %-6i \t %-10s \t %-25s \t %-5s \t %-50s \n " , $teamName , $year , $owner , $captain ) ; }
print "\n \n HTML Page containing information on my Team:\n \n " ;
print "<title>My Team</title>" ; print "<H1>Sports Teams</H1>\n " ; print "<table border=1>\n " ; print "<tr><th>Team</th><th>Year</th><th>Owner</th><th>Captain</th><th>Champions</th><th>Notes</th></tr>\n " ;
$year = $myTeams { $teamName } { 'year' } ;
$owner = $myTeams { $teamName } { 'owner' } ;
$captain = $myTeams { $teamName } { 'captain' } ;
$champs = $myTeams { $teamName } { 'champs' } ;
$notes = $myTeams { $teamName } { 'notes' } ;
print "<tr><td>$teamName</td><td>$year</td><td>$owner</td><td>$captain</td><td>$champs</td><td>$notes</td></tr>\n " ; }
IyEvdXNyL2Jpbi9wZXJsCgojIFBlcmwgQXNzaWdubWVudCAtIEhhc2ggb2YgSGFzaGVzCiMgQmlsbCBEYXZlcm4KIyBBc3NpZ25tZW50IDgKCiMgVGVhbXMgdXNpbmcgYSBIYXNoIG9mIEhhc2hlcwoKIyBTcG9ydHMgVGVhbSBZZWFyIE93bmVyIENhcHRhaW4gQ2hhbXBpb25zIE5vdGVzCgojIEp1c3RpY2UgU29jaWV0eSAgMTk0MCBEQyAgICAgSGF3a21hbgojIEp1c3RpY2UgTGVhZ3VlICAgMTk2MCBEQyAgICAgU3VwZXJtYW4KIyBGYW50YXN0aWMgRm91ciAgIDE5NjEgTWFydmVsIE1yLiBGYW50YXN0aWMKIyBBdmVuZ2VycyAgICAgICAgIDE5NjMgTWFydmVsIENhcHRhaW4gQW1lcmljYQojIFgtTWVuICAgICAgICAgICAgMTk2MyBNYXJ2ZWwgUHJvZmVzc29yIFgKCiMgSSBoYXZlIGNyZWF0ZWQgdGhlIGZvbGxvd2luZyBhcnJheToKCkB0ZWFtcyA9ICgiQm9zdG9uIEJydWlucyIsICJOZXcgRW5nbGFuZCBQYXRyaW90cyIsICJVU0EgSG9ja2V5IiwgIkJvc3RvbiBDZWx0aWNzIiAsICJCb3N0b24gUmVkc294Iik7CgojIGFuZCB0aGUgZm9sbG93aW5nIEhhc2ggb2YgSGFzaGVzOgoKJW15VGVhbXMgPSAoICJCb3N0b24gQnJ1aW5zIiA9PiB7IHllYXIgPT4gMjAxMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkouIEphY3VwcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRhaW4gPT4gIlpkZW5vIENoYXJyYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW1wcyA9PiAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXMgPT4gIk1vcmUgb2YgYSBnYW5nIHRoZW4gYSB0ZWFtISIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJOZXcgRW5nbGFuZCBQYXRyaW90cyIgPT4geyB5ZWFyID0+IDIwMTgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJLcmFmdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRhaW4gPT4gIlRvbSBCcmFkeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW1wcyA9PiAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXMgPT4gIkJlc3QgQ29tZWJhY2sgRXZlciEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiVVNBIEhvY2tleSIgPT4geyB5ZWFyID0+IDE5ODAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJVU0EgSG9ja2V5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGFpbiA9PiAiTWlrZSBFcnV6aW9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW1wcyA9PiAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXMgPT4gIkdyZWF0ZXN0IFNwb3J0aW5nIGV2ZW50IEVWRVIhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICJCb3N0b24gUmVkc294IiA9PiB7IHllYXIgPT4gMjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkpvaG4gSGVucnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0YWluID0+ICJKYXNvbiBWYXJpdGVrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbXBzID0+ICJZZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlcyA9PiAiQ2FuIHlvdSBzYXkgU3dlZXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAiQm9zdG9uIENlbHRpY3MiID0+IHsgeWVhciA9PiAyMDA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiAiV2ljIEdyb3VzYmVjayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRhaW4gPT4gIlBhdWwgUGllcmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbXBzID0+ICJZZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RlcyA9PiAiQmFubmVyIDE3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKCik7CgojIFRvIHByaW50IG91dCBzb3J0ZWQgVGVhbSBpbmZvcm1hdGlvbiBpbiB0aGUgSGFzaCBvZiBIYXNoZXMgKGFzY2VuZGluZyBvcmRlcik6CgpwcmludCAoIlxuXG5NeSBUZWFtIC0gc29ydGVkIGJ5IFRlYW0gTmFtZSBhc2NlbmRpbmc6XG5cbiIpOwoKcHJpbnRmKCIlLTIwcyBcdCUtNmkgXHQlLTE1cyBcdCUtMjVzIFx0JS01cyBcdCUtNTBzIFxuIiwgJHRlYW1OYW1lLCAkeWVhciwgJG93bmVyLCAkY2FwdGFpbiwgJGNoYW1wcywgJG5vdGVzKTsKCkBzb3J0ZWRLZXlzID0gc29ydCAoQHRlYW1zKTsKCmZvciAkdGVhbU5hbWUgKEBzb3J0ZWRLZXlzKSB7CiAgICAkeWVhciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J3llYXInfTsKICAgICRvd25lciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J293bmVyJ307CiAgICAkY2FwdGFpbiA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2NhcHRhaW4nfTsKICAgICRjaGFtcHMgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydjaGFtcHMnfTsKICAgICRub3RlcyA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J25vdGVzJ307CgogICAgcHJpbnRmKCIlLTIwcyBcdCUtNmkgXHQlLTEwcyBcdCUtMjVzIFx0JS01cyBcdCUtNTBzIFxuIiwgJHRlYW1OYW1lLCAkeWVhciwgJG93bmVyLCAkY2FwdGFpbiwgJGNoYW1wcywgJG5vdGVzKTsKICAgIHByaW50ICJcbiI7Cn0KCiMgVG8gcHJpbnQgb3V0IHNvcnRlZCBUZWFtIGluZm9ybWF0aW9uIGluIHRoZSBIYXNoIG9mIEhhc2hlcyAoZGVzY2VuZGluZyBvcmRlcik6CgpwcmludCAoIlxuXE15IFRlYW0gLSBzb3J0ZWQgYnkgVGVhbSBOYW1lIGRlY2VuZGluZzpcblxuIik7CgpwcmludGYoIiUtMjBzIFx0JS02cyBcdCUtMTBzIFx0JS0yNXMgXHQlLTVzIFx0JS01MHMgXHRcbiIsICJUZWFtIiwgIlllYXIiLCAiT3duZXIiLCAiQ2FwdGFpbiIsICJDaGFtcGlvbnMiLCAiTm90ZXMiKTsKCkByZXZlcnNlS2V5cyA9IHJldmVyc2UgKEBzb3J0ZWRLZXlzKTsKCmZvciAkdGVhbU5hbWUgKEByZXZlcnNlS2V5cykgewogICAgJHllYXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eyd5ZWFyJ307CiAgICAkb3duZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydvd25lcid9OwogICAgJGNhcHRhaW4gPSAkbXlUZWFtc3skdGVhbU5hbWV9eydjYXB0YWluJ307CiAgICAkY2hhbXBzID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnY2hhbXBzJ307CiAgICAkbm90ZXMgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydub3Rlcyd9OwogICAgCiAgICBwcmludGYoIiUtMjBzIFx0JS02aSBcdCUtMTBzIFx0JS0yNXMgXHQlLTVzIFx0JS01MHMgXG4iLCAkdGVhbU5hbWUsICR5ZWFyLCAkb3duZXIsICRjYXB0YWluKTsKICAgIHByaW50ICJcbiI7Cn0KCnByaW50ICJcblxuSFRNTCBQYWdlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24gbXkgVGVhbTpcblxuIjsKCnByaW50ICI8aHRtbD5cbiI7CnByaW50ICI8aGVhZD5cbiI7CnByaW50ICI8dGl0bGU+TXkgVGVhbTwvdGl0bGU+IjsKcHJpbnQgIjwvaGVhZD5cbiI7CnByaW50ICI8Ym9keT5cbiI7CnByaW50ICI8SDE+U3BvcnRzIFRlYW1zPC9IMT5cbiI7CnByaW50ICI8dGFibGUgYm9yZGVyPTE+XG4iOwpwcmludCAiPHRyPjx0aD5UZWFtPC90aD48dGg+WWVhcjwvdGg+PHRoPk93bmVyPC90aD48dGg+Q2FwdGFpbjwvdGg+PHRoPkNoYW1waW9uczwvdGg+PHRoPk5vdGVzPC90aD48L3RyPlxuIjsKCmZvciAkdGVhbU5hbWUgKHNvcnQga2V5cyAlbXlUZWFtcyApIHsKICAgICR5ZWFyID0gJG15VGVhbXN7JHRlYW1OYW1lfXsneWVhcid9OwogICAgJG93bmVyID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnb3duZXInfTsKICAgICRjYXB0YWluID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnY2FwdGFpbid9OwogICAgJGNoYW1wcyA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2NoYW1wcyd9OwogICAgJG5vdGVzID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnbm90ZXMnfTsKCiAgICBwcmludCAiPHRyPjx0ZD4kdGVhbU5hbWU8L3RkPjx0ZD4keWVhcjwvdGQ+PHRkPiRvd25lcjwvdGQ+PHRkPiRjYXB0YWluPC90ZD48dGQ+JGNoYW1wczwvdGQ+PHRkPiRub3RlczwvdGQ+PC90cj5cbiI7Cn0KcHJpbnQgIjwvdGFibGU+XG4iOwpwcmludCAiPC9ib2R5PlxuIjsKcHJpbnQgIjwvaHRtbD5cbiI7Cgo=