# 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 Redsox" => { year => 2007 ,
owner => "John Henry" ,
captain => "Jason Varitek" ,
champs => "Yes" ,
notes => "Can you say Sweep" ,
} ,
) ;
# 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 %-5 \t %-50 \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' } ;
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 " ; }
IyBQZXJsIEFzc2lnbm1lbnQgLSBIYXNoIG9mIEhhc2hlcwojIEJpbGwgRGF2ZXJuCiMgQXNzaWdubWVudCA4CgojIFRlYW1zIHVzaW5nIGEgSGFzaCBvZiBIYXNoZXMKCiMgU3BvcnRzIFRlYW0gWWVhciBPd25lciBDYXB0YWluIENoYW1waW9ucyBOb3RlcwoKIyBKdXN0aWNlIFNvY2lldHkgIDE5NDAgREMgICAgIEhhd2ttYW4KIyBKdXN0aWNlIExlYWd1ZSAgIDE5NjAgREMgICAgIFN1cGVybWFuCiMgRmFudGFzdGljIEZvdXIgICAxOTYxIE1hcnZlbCBNci4gRmFudGFzdGljCiMgQXZlbmdlcnMgICAgICAgICAxOTYzIE1hcnZlbCBDYXB0YWluIEFtZXJpY2EKIyBYLU1lbiAgICAgICAgICAgIDE5NjMgTWFydmVsIFByb2Zlc3NvciBYCgojIEkgaGF2ZSBjcmVhdGVkIHRoZSBmb2xsb3dpbmcgYXJyYXk6CgpAdGVhbXMgPSAoIkJvc3RvbiBCcnVpbnMiLCAiTmV3IEVuZ2xhbmQgUGF0cmlvdHMiLCAiVVNBIEhvY2tleSIsICJCb3N0b24gQ2VsdGljcyIgLCAiQm9zdG9uIFJlZHNveCIpOwoKIyBhbmQgdGhlIGZvbGxvd2luZyBIYXNoIG9mIEhhc2hlczoKCiVteVRlYW1zID0gKCAiQm9zdG9uIEJydWlucyIgPT4geyB5ZWFyID0+IDIwMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJKLiBKYWN1cHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0YWluID0+ICJaZGVubyBDaGFycmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtcHMgPT4gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGVzID0+ICJNb3JlIG9mIGEgZ2FuZyB0aGVuIGEgdGVhbSEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiTmV3IEVuZ2xhbmQgUGF0cmlvdHMiID0+IHsgeWVhciA9PiAyMDE4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiAiS3JhZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0YWluID0+ICJUb20gQnJhZHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtcHMgPT4gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGVzID0+ICJCZXN0IENvbWViYWNrIEV2ZXIhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIlVTQSBIb2NrZXkiID0+IHsgeWVhciA9PiAxOTgwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiAiVVNBIEhvY2tleSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRhaW4gPT4gIk1pa2UgRXJ1emlvbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtcHMgPT4gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGVzID0+ICJHcmVhdGVzdCBTcG9ydGluZyBldmVudCBFVkVSISIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAiQm9zdG9uIFJlZHNveCIgPT4geyB5ZWFyID0+IDIwMDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJKb2huIEhlbnJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdGFpbiA9PiAiSmFzb24gVmFyaXRlayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW1wcyA9PiAiWWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90ZXMgPT4gIkNhbiB5b3Ugc2F5IFN3ZWVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIkJvc3RvbiBSZWRzb3giID0+IHsgeWVhciA9PiAyMDA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiAiSm9obiBIZW5yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHRhaW4gPT4gIkphc29uIFZhcml0ZWsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFtcHMgPT4gIlllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGVzID0+ICJDYW4geW91IHNheSBTd2VlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCgopOwoKIyBUbyBwcmludCBvdXQgc29ydGVkIFRlYW0gaW5mb3JtYXRpb24gaW4gdGhlIEhhc2ggb2YgSGFzaGVzIChhc2NlbmRpbmcgb3JkZXIpOgoKcHJpbnQgKCJcblxuTXkgVGVhbSAtIHNvcnRlZCBieSBUZWFtIE5hbWUgYXNjZW5kaW5nOlxuXG4iKTsKCnByaW50ZigiJS0yMHMgXHQlLTZpIFx0JS0xNXMgXHQlLTI1cyBcdCUtNXMgXHQlLTUwcyBcbiIsICR0ZWFtTmFtZSwgJHllYXIsICRvd25lciwgJGNhcHRhaW4sICRjaGFtcHMsICRub3Rlcyk7CgpAc29ydGVkS2V5cyA9IHNvcnQgKEB0ZWFtcyk7Cgpmb3IgJHRlYW1OYW1lIChAc29ydGVkS2V5cykgewogICAgJHllYXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eyd5ZWFyJ307CiAgICAkb3duZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydvd25lcid9OwogICAgJGNhcHRhaW4gPSAkbXlUZWFtc3skdGVhbU5hbWV9eydjYXB0YWluJ307CiAgICAkY2hhbXBzID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnY2hhbXBzJ307CiAgICAkbm90ZXMgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydub3Rlcyd9OwoKICAgIHByaW50ZigiJS0yMHMgXHQlLTZpIFx0JS0xMHMgXHQlLTI1cyBcdCUtNSBcdCUtNTAgXG4iLCAkdGVhbU5hbWUsICR5ZWFyLCAkb3duZXIsICRjYXB0YWluLCAkY2hhbXBzLCAkbm90ZXMpOwogICAgcHJpbnQgIlxuIjsKfQoKIyBUbyBwcmludCBvdXQgc29ydGVkIFRlYW0gaW5mb3JtYXRpb24gaW4gdGhlIEhhc2ggb2YgSGFzaGVzIChkZXNjZW5kaW5nIG9yZGVyKToKCnByaW50ICgiXG5cTXkgVGVhbSAtIHNvcnRlZCBieSBUZWFtIE5hbWUgZGVjZW5kaW5nOlxuXG4iKTsKCnByaW50ZigiJS0yMHMgXHQlLTZzIFx0JS0xMHMgXHQlLTI1cyBcdCUtNXMgXHQlLTUwcyBcdFxuIiwgIlRlYW0iLCAiWWVhciIsICJPd25lciIsICJDYXB0YWluIiwgIkNoYW1waW9ucyIsICJOb3RlcyIpOwoKQHJldmVyc2VLZXlzID0gcmV2ZXJzZSAoQHNvcnRlZEtleXMpOwoKZm9yICR0ZWFtTmFtZSAoQHJldmVyc2VLZXlzKSB7CiAgICAkeWVhciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J3llYXInfTsKICAgICRvd25lciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J293bmVyJ307CiAgICAkY2FwdGFpbiA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2NhcHRhaW4nfTsKICAgIAogICAgcHJpbnRmKCIlLTIwcyBcdCUtNmkgXHQlLTEwcyBcdCUtMjVzIFx0JS01cyBcdCUtNTBzIFxuIiwgJHRlYW1OYW1lLCAkeWVhciwgJG93bmVyLCAkY2FwdGFpbik7CiAgICBwcmludCAiXG4iOwp9CgpwcmludCAiXG5cbkhUTUwgUGFnZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIG15IFRlYW06XG5cbiI7CgpwcmludCAiPGh0bWw+XG4iOwpwcmludCAiPGhlYWQ+XG4iOwpwcmludCAiPHRpdGxlPk15IFRlYW08L3RpdGxlPiI7CnByaW50ICI8L2hlYWQ+XG4iOwpwcmludCAiPGJvZHk+XG4iOwpwcmludCAiPEgxPlNwb3J0cyBUZWFtczwvSDE+XG4iOwpwcmludCAiPHRhYmxlIGJvcmRlcj0xPlxuIjsKcHJpbnQgIjx0cj48dGg+VGVhbTwvdGg+PHRoPlllYXI8L3RoPjx0aD5Pd25lcjwvdGg+PHRoPkNhcHRhaW48L3RoPjx0aD5DaGFtcGlvbnM8L3RoPjx0aD5Ob3RlczwvdGg+PC90cj5cbiI7Cgpmb3IgJHRlYW1OYW1lIChzb3J0IGtleXMgJW15VGVhbXMgKSB7CiAgICAkeWVhciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J3llYXInfTsKICAgICRvd25lciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J293bmVyJ307CiAgICAkY2FwdGFpbiA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J2NhcHRhaW4nfTsKICAgICRjaGFtcHMgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydjaGFtcHMnfTsKICAgICRub3RlcyA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J25vdGVzJ307CgogICAgcHJpbnQgIjx0cj48dGQ+JHRlYW1OYW1lPC90ZD48dGQ+JHllYXI8L3RkPjx0ZD4kb3duZXI8L3RkPjx0ZD4kY2FwdGFpbjwvdGQ+PHRkPiRjaGFtcHM8L3RkPjx0ZD4kbm90ZXM8L3RkPjwvdHI+XG4iOwp9CnByaW50ICI8L3RhYmxlPlxuIjsKcHJpbnQgIjwvYm9keT5cbiI7CnByaW50ICI8L2h0bWw+XG4iOwoK