#!/usr/bin/perl
use strict;
use warnings;
# My favorite teams example
# Array of team names
my @teams = ( "New England Patriots" , "Golden State Warriors" , "New York Yankees" , "Los Angeles Lakers" , "Chicago Cubs" ) ;
# Hash of hashes holding team info
my %myTeams = (
"New England Patriots" => { yearBorn => 1959 ,
owner => "Robert Kraft" ,
leader => "Bill Belichick" ,
} ,
"Golden State Warriors" => { yearBorn => 1946 ,
owner => "Joe Lacob" ,
leader => "Steve Kerr" ,
} ,
"New York Yankees" => { yearBorn => 1903 ,
owner => "Hal Steinbrenner" ,
leader => "Aaron Boone" ,
} ,
"Los Angeles Lakers" => { yearBorn => 1947 ,
owner => "Jeanie Buss" ,
leader => "Darvin Ham" ,
} ,
"Chicago Cubs" => { yearBorn => 1876 ,
owner => "Tom Ricketts" ,
leader => "David Ross" ,
} ,
) ;
# To print out sorted Team information ascending order
print ( "\n \n My Team - sorted by Team Name ascending:\n \n " ) ; printf ( "%-25s \t %-6s \t %-20s \t %-20s \n " , "Team" , "Year" , "Owner" , "Leader" ) ;
my @sortedKeys = sort @teams ;
for my $teamName ( @sortedKeys ) {
my $yearBorn = $myTeams { $teamName } { 'yearBorn' } ;
my $owner = $myTeams { $teamName } { 'owner' } ;
my $leader = $myTeams { $teamName } { 'leader' } ;
printf ( "%-25s \t %-6i \t %-20s \t %-20s \n " , $teamName , $yearBorn , $owner , $leader ) ; }
# To print out sorted Team information descending order
print ( "\n \n My Team - sorted by Team Name descending:\n \n " ) ; printf ( "%-25s \t %-6s \t %-20s \t %-20s \n " , "Team" , "Year" , "Owner" , "Leader" ) ;
my @reverseKeys = reverse @sortedKeys ;
for my $teamName ( @reverseKeys ) {
my $yearBorn = $myTeams { $teamName } { 'yearBorn' } ;
my $owner = $myTeams { $teamName } { 'owner' } ;
my $leader = $myTeams { $teamName } { 'leader' } ;
printf ( "%-25s \t %-6i \t %-20s \t %-20s \n " , $teamName , $yearBorn , $owner , $leader ) ; }
# HTML output
print "\n \n HTML Page containing information on my Team:\n \n " ;
print "<title>My Favorite Sports Teams</title>\n " ; print "<H1>My Favorite Sports Teams</H1>\n " ; print "<table border=1>\n " ; print "<tr><th>Team</th><th>Year</th><th>Owner</th><th>Leader</th></tr>\n " ;
my $yearBorn = $myTeams { $teamName } { 'yearBorn' } ;
my $owner = $myTeams { $teamName } { 'owner' } ;
my $leader = $myTeams { $teamName } { 'leader' } ;
print "<tr><td>$teamName</td><td>$yearBorn</td><td>$owner</td><td>$leader</td></tr>\n " ; }
IyEvdXNyL2Jpbi9wZXJsCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgTXkgZmF2b3JpdGUgdGVhbXMgZXhhbXBsZQoKIyBBcnJheSBvZiB0ZWFtIG5hbWVzCm15IEB0ZWFtcyA9ICgiTmV3IEVuZ2xhbmQgUGF0cmlvdHMiLCAiR29sZGVuIFN0YXRlIFdhcnJpb3JzIiwgIk5ldyBZb3JrIFlhbmtlZXMiLCAiTG9zIEFuZ2VsZXMgTGFrZXJzIiwgIkNoaWNhZ28gQ3VicyIpOwoKIyBIYXNoIG9mIGhhc2hlcyBob2xkaW5nIHRlYW0gaW5mbwpteSAlbXlUZWFtcyA9ICgKICAgICJOZXcgRW5nbGFuZCBQYXRyaW90cyIgPT4geyB5ZWFyQm9ybiA9PiAxOTU5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyID0+ICJSb2JlcnQgS3JhZnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlYWRlciA9PiAiQmlsbCBCZWxpY2hpY2siLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgIkdvbGRlbiBTdGF0ZSBXYXJyaW9ycyIgPT4geyB5ZWFyQm9ybiA9PiAxOTQ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciA9PiAiSm9lIExhY29iIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGVyID0+ICJTdGV2ZSBLZXJyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAiTmV3IFlvcmsgWWFua2VlcyIgPT4geyB5ZWFyQm9ybiA9PiAxOTAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkhhbCBTdGVpbmJyZW5uZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGVyID0+ICJBYXJvbiBCb29uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICJMb3MgQW5nZWxlcyBMYWtlcnMiID0+IHsgeWVhckJvcm4gPT4gMTk0NywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIkplYW5pZSBCdXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVhZGVyID0+ICJEYXJ2aW4gSGFtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAiQ2hpY2FnbyBDdWJzIiA9PiB7IHllYXJCb3JuID0+IDE4NzYsCiAgICAgICAgICAgICAgICAgICAgICAgb3duZXIgPT4gIlRvbSBSaWNrZXR0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgbGVhZGVyID0+ICJEYXZpZCBSb3NzIiwKICAgICAgICAgICAgICAgICAgICAgfSwKKTsKCiMgVG8gcHJpbnQgb3V0IHNvcnRlZCBUZWFtIGluZm9ybWF0aW9uIGFzY2VuZGluZyBvcmRlcgpwcmludCAoIlxuXG5NeSBUZWFtIC0gc29ydGVkIGJ5IFRlYW0gTmFtZSBhc2NlbmRpbmc6XG5cbiIpOwpwcmludGYoIiUtMjVzIFx0JS02cyBcdCUtMjBzIFx0JS0yMHMgXG4iLCAiVGVhbSIsICJZZWFyIiwgIk93bmVyIiwgIkxlYWRlciIpOwoKbXkgQHNvcnRlZEtleXMgPSBzb3J0IEB0ZWFtczsKCmZvciBteSAkdGVhbU5hbWUgKEBzb3J0ZWRLZXlzKSB7CiAgICBteSAkeWVhckJvcm4gPSAkbXlUZWFtc3skdGVhbU5hbWV9eyd5ZWFyQm9ybid9OwogICAgbXkgJG93bmVyID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnb3duZXInfTsKICAgIG15ICRsZWFkZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydsZWFkZXInfTsKCiAgICBwcmludGYoIiUtMjVzIFx0JS02aSBcdCUtMjBzIFx0JS0yMHMgXG4iLCAkdGVhbU5hbWUsICR5ZWFyQm9ybiwgJG93bmVyLCAkbGVhZGVyKTsKICAgIHByaW50ICJcbiI7Cn0KCiMgVG8gcHJpbnQgb3V0IHNvcnRlZCBUZWFtIGluZm9ybWF0aW9uIGRlc2NlbmRpbmcgb3JkZXIKcHJpbnQgKCJcblxuTXkgVGVhbSAtIHNvcnRlZCBieSBUZWFtIE5hbWUgZGVzY2VuZGluZzpcblxuIik7CnByaW50ZigiJS0yNXMgXHQlLTZzIFx0JS0yMHMgXHQlLTIwcyBcbiIsICJUZWFtIiwgIlllYXIiLCAiT3duZXIiLCAiTGVhZGVyIik7CgpteSBAcmV2ZXJzZUtleXMgPSByZXZlcnNlIEBzb3J0ZWRLZXlzOwoKZm9yIG15ICR0ZWFtTmFtZSAoQHJldmVyc2VLZXlzKSB7CiAgICBteSAkeWVhckJvcm4gPSAkbXlUZWFtc3skdGVhbU5hbWV9eyd5ZWFyQm9ybid9OwogICAgbXkgJG93bmVyID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnb3duZXInfTsKICAgIG15ICRsZWFkZXIgPSAkbXlUZWFtc3skdGVhbU5hbWV9eydsZWFkZXInfTsKCiAgICBwcmludGYoIiUtMjVzIFx0JS02aSBcdCUtMjBzIFx0JS0yMHMgXG4iLCAkdGVhbU5hbWUsICR5ZWFyQm9ybiwgJG93bmVyLCAkbGVhZGVyKTsKICAgIHByaW50ICJcbiI7Cn0KCiMgSFRNTCBvdXRwdXQKcHJpbnQgIlxuXG5IVE1MIFBhZ2UgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiBteSBUZWFtOlxuXG4iOwoKcHJpbnQgIjxodG1sPlxuIjsKcHJpbnQgIjxoZWFkPlxuIjsKcHJpbnQgIjx0aXRsZT5NeSBGYXZvcml0ZSBTcG9ydHMgVGVhbXM8L3RpdGxlPlxuIjsKcHJpbnQgIjwvaGVhZD5cbiI7CnByaW50ICI8Ym9keT5cbiI7CnByaW50ICI8SDE+TXkgRmF2b3JpdGUgU3BvcnRzIFRlYW1zPC9IMT5cbiI7CnByaW50ICI8dGFibGUgYm9yZGVyPTE+XG4iOwpwcmludCAiPHRyPjx0aD5UZWFtPC90aD48dGg+WWVhcjwvdGg+PHRoPk93bmVyPC90aD48dGg+TGVhZGVyPC90aD48L3RyPlxuIjsKCmZvciBteSAkdGVhbU5hbWUgKHNvcnQga2V5cyAlbXlUZWFtcykgewogICAgbXkgJHllYXJCb3JuID0gJG15VGVhbXN7JHRlYW1OYW1lfXsneWVhckJvcm4nfTsKICAgIG15ICRvd25lciA9ICRteVRlYW1zeyR0ZWFtTmFtZX17J293bmVyJ307CiAgICBteSAkbGVhZGVyID0gJG15VGVhbXN7JHRlYW1OYW1lfXsnbGVhZGVyJ307CgogICAgcHJpbnQgIjx0cj48dGQ+JHRlYW1OYW1lPC90ZD48dGQ+JHllYXJCb3JuPC90ZD48dGQ+JG93bmVyPC90ZD48dGQ+JGxlYWRlcjwvdGQ+PC90cj5cbiI7Cn0KCnByaW50ICI8L3RhYmxlPlxuIjsKcHJpbnQgIjwvYm9keT5cbiI7CnByaW50ICI8L2h0bWw+XG4iOw==