#!/usr/bin/perl
# Perl Assignment - Hash of Hashes
# J Student
# Spirits using a Hash of Hashes
# Spirit Name Distributor Type AlcVol Size Origin
# BeefEater Pernod Ricardo Gin 0.47 1litre London
# Drambuie Hiram Walker Whisky 0.40 750ml Scotland
# Chivas Regal Chivas Bros Whisky 0.40 750ml Scotland
# The Balverie Carribean Cask William Grant Rum 0.43 750ml Scotland
# Martini & Rossi Bacardi Inc Vermouth 0.16 375ml Italy
# I have created the following array:
@spirits = ("BeefEater", "Drambuie", "Chivas Regal", "The Balverie Carribean Cask" , "Martini & Rossi");
# and the following Hash of Hashes:
%mySpirits = ( "BeefEater" => { distributor => "Pernod Ricardo",
type => "Gin",
alcvol => 0.47,
size => "1litre",
origin => "England"
},
"Drambuie" => { distributor => "Hiram Walker",
type => "Whisky",
alcvol => 0.40,
size => "750ml",
origin => "Scotland"
},
"Chivas Regal" => { distributor => "Chivas Bros",
type => "Whisky",
alcvol => 0.40,
size => "750ml",
origin => "Scotland"
},
"The Balverie Carribean Cask" => { distributor => "William Grant",
type => "Rum",
alcvol => 0.43,
size => "750ml",
origin => "Scotland"
},
"Martini & Rossi" => { distributor=> "Barcadi Inc",
type => "Vermouth",
alcvol => 0.16,
size => "750ml",
origin => "Italy"
},
);
# To print out sorted Team information in the Hash of Hashes (ascending order):
print ("\n\nMy Spirits - sorted by Spirit Name ascending:\n\n");
printf("%-20s \t%-6s \t%-10s \t%-25s \t%-10s \t%-10s \n", "Spirit Name", "Distributor", "Type", "AlcVol", "Size", "Origin");
@sortedKeys = sort (@spirits);
for $spiritName (@sortedKeys) {
$distributor = $mySpirits{$spiritName}{'distributor'};
$type = $mySpirits{$spiritName}{'type'};
$alcvol = $mySpirits{$spiritName}{'alcvol'};
$size = $mySpirits{$spiritName}{'size'};
$origin = $mySpirits{$spiritName}{'origin'};
printf("%-20s \t%-6i \t%-10s \t%-25s \t%-10s \t%-10s \n",$spiritName, $distributor, $type, $alcvol, $size, $origin); }
print "\n\nHTML Page containing information on my Team:\n\n";
print "<title>Product Registration</title>"; print "<H1>Spirit List</H1>\n"; print "<table border=1>\n"; print "<tr><th>Spirit</th><th>Distributor</th><th>Type</th><th>Alc/Vol</th><th>Size</th><th>Origin</th></tr>\n";
for $spiritName (sort keys %mySpirits ) { $distributor = $mySpirits{$spiritName}{'distributor'};
$type = $mySpirits{$spiritName}{'type'};
$alcvol = $mySpirits{$spiritName}{'alcvol'};
$size = $mySpirits{$spiritName}{'size'};
$origin = $mySpirits{$spiritName}{'origin'};
print "<tr><td>$spiritName</td><td>$distributor</td><td>$type</td><td>$alcvol</td><td>$size</td><td>$origin</td></tr>\n"; }
print "\n\nXML file containing information on my Spirits - by Spirit Name ascending:\n\n";
print "<?xml version=\"1.0\"?>\n";
for $spiritName (sort keys %mySpirits ) {
$distributor = $mySpirits{$spiritName}{'distributor'};
$type = $mySpirits{$spiritName}{'type'};
$alcvol = $mySpirits{$spiritName}{'alcvol'};
$size = $mySpirits{$spiritName}{'size'};
$origin = $mySpirits{$spiritName}{'origin'};
print " < spiritName>$ spiritName</ spiritName>\n"; print " < distributor>$distributor</ distributor>\n"; print " < type>$type</ type>\n"; print " < alcvol>$alcvol</ alcvol>\n"; print " < size>$size</ size>\n"; print " < origin>$origin</ origin>\n"; }
IyEvdXNyL2Jpbi9wZXJsCiMgUGVybCBBc3NpZ25tZW50IC0gSGFzaCBvZiBIYXNoZXMKIyBKIFN0dWRlbnQKCiMgU3Bpcml0cyB1c2luZyBhIEhhc2ggb2YgSGFzaGVzCgojIFNwaXJpdCBOYW1lICAgICAgICAgICAgICAgICBEaXN0cmlidXRvciAgICAgICBUeXBlICAgICAgICAgQWxjVm9sICAgICAgICAgIFNpemUgICAgICAgIE9yaWdpbgoKIyBCZWVmRWF0ZXIgICAgICAgICAgICAgICAgICAgUGVybm9kIFJpY2FyZG8gICAgIEdpbiAgICAgICAgIDAuNDcgICAgICAgICAgICAgMWxpdHJlICAgICAgTG9uZG9uCiMgRHJhbWJ1aWUgICAgICAgICAgICAgICAgICAgICBIaXJhbSBXYWxrZXIgICAgIFdoaXNreSAgICAgICAwLjQwICAgICAgICAgICAgIDc1MG1sICAgICAgIFNjb3RsYW5kCiMgQ2hpdmFzIFJlZ2FsICAgICAgICAgICAgICAgICBDaGl2YXMgQnJvcyAgICAgIFdoaXNreSAgICAgICAwLjQwICAgICAgICAgICAgIDc1MG1sICAgICAgIFNjb3RsYW5kIAojIFRoZSBCYWx2ZXJpZSBDYXJyaWJlYW4gQ2FzayAgV2lsbGlhbSBHcmFudCAgICBSdW0gICAgICAgICAgMC40MyAgICAgICAgICAgICA3NTBtbCAgICAgICBTY290bGFuZAojIE1hcnRpbmkgJiBSb3NzaSAgICAgICAgICAgICAgQmFjYXJkaSBJbmMgICAgICBWZXJtb3V0aCAgICAgMC4xNiAgICAgICAgICAgICAzNzVtbCAgICAgICBJdGFseQoKIyBJIGhhdmUgY3JlYXRlZCB0aGUgZm9sbG93aW5nIGFycmF5OgoKQHNwaXJpdHMgPSAoIkJlZWZFYXRlciIsICJEcmFtYnVpZSIsICJDaGl2YXMgUmVnYWwiLCAiVGhlIEJhbHZlcmllIENhcnJpYmVhbiBDYXNrIiAsICJNYXJ0aW5pICYgUm9zc2kiKTsKCiMgYW5kIHRoZSBmb2xsb3dpbmcgSGFzaCBvZiBIYXNoZXM6CgolbXlTcGlyaXRzID0gKCAiQmVlZkVhdGVyIiA9PiB7IGRpc3RyaWJ1dG9yID0+ICJQZXJub2QgUmljYXJkbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gIkdpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsY3ZvbCA9PiAwLjQ3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0+ICIxbGl0cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPT4gIkVuZ2xhbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJEcmFtYnVpZSIgPT4geyBkaXN0cmlidXRvciA9PiAiSGlyYW0gV2Fsa2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9PiAiV2hpc2t5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxjdm9sID0+IDAuNDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPT4gIjc1MG1sIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luID0+ICJTY290bGFuZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIkNoaXZhcyBSZWdhbCIgPT4geyBkaXN0cmlidXRvciA9PiAiQ2hpdmFzIEJyb3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICJXaGlza3kiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGN2b2wgPT4gMC40MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9PiAiNzUwbWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4gPT4gIlNjb3RsYW5kIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIlRoZSBCYWx2ZXJpZSBDYXJyaWJlYW4gQ2FzayIgPT4geyBkaXN0cmlidXRvciA9PiAiV2lsbGlhbSBHcmFudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT4gIlJ1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsY3ZvbCA9PiAwLjQzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0+ICI3NTBtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9PiAiU2NvdGxhbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICJNYXJ0aW5pICYgUm9zc2kiID0+IHsgZGlzdHJpYnV0b3I9PiAiQmFyY2FkaSBJbmMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0+ICJWZXJtb3V0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsY3ZvbCA9PiAwLjE2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0+ICI3NTBtbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbiA9PiAiSXRhbHkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAoKKTsKCiMgVG8gcHJpbnQgb3V0IHNvcnRlZCBUZWFtIGluZm9ybWF0aW9uIGluIHRoZSBIYXNoIG9mIEhhc2hlcyAoYXNjZW5kaW5nIG9yZGVyKToKCnByaW50ICgiXG5cbk15IFNwaXJpdHMgLSBzb3J0ZWQgYnkgU3Bpcml0IE5hbWUgYXNjZW5kaW5nOlxuXG4iKTsKCnByaW50ZigiJS0yMHMgXHQlLTZzIFx0JS0xMHMgXHQlLTI1cyBcdCUtMTBzIFx0JS0xMHMgXG4iLCAiU3Bpcml0IE5hbWUiLCAiRGlzdHJpYnV0b3IiLCAiVHlwZSIsICJBbGNWb2wiLCAiU2l6ZSIsICJPcmlnaW4iKTsgCgpAc29ydGVkS2V5cyA9IHNvcnQgKEBzcGlyaXRzKTsKCmZvciAkc3Bpcml0TmFtZSAoQHNvcnRlZEtleXMpIHsKICAgICRkaXN0cmlidXRvciA9ICRteVNwaXJpdHN7JHNwaXJpdE5hbWV9eydkaXN0cmlidXRvcid9OwogICAgJHR5cGUgPSAkbXlTcGlyaXRzeyRzcGlyaXROYW1lfXsndHlwZSd9OwogICAgJGFsY3ZvbCA9ICRteVNwaXJpdHN7JHNwaXJpdE5hbWV9eydhbGN2b2wnfTsKICAgICRzaXplID0gJG15U3Bpcml0c3skc3Bpcml0TmFtZX17J3NpemUnfTsKICAgICRvcmlnaW4gPSAkbXlTcGlyaXRzeyRzcGlyaXROYW1lfXsnb3JpZ2luJ307CnByaW50ZigiJS0yMHMgXHQlLTZpIFx0JS0xMHMgXHQlLTI1cyBcdCUtMTBzIFx0JS0xMHMgXG4iLCRzcGlyaXROYW1lLCAkZGlzdHJpYnV0b3IsICR0eXBlLCAkYWxjdm9sLCAkc2l6ZSwgJG9yaWdpbik7IAogICAgcHJpbnQgIlxuIjsKfQoKCgpwcmludCAiXG5cbkhUTUwgUGFnZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uIG15IFRlYW06XG5cbiI7CgpwcmludCAiPGh0bWw+XG4iOwpwcmludCAiPGhlYWQ+XG4iOwpwcmludCAiPHRpdGxlPlByb2R1Y3QgUmVnaXN0cmF0aW9uPC90aXRsZT4iOwpwcmludCAiPC9oZWFkPlxuIjsKcHJpbnQgIjxib2R5PlxuIjsKcHJpbnQgIjxIMT5TcGlyaXQgTGlzdDwvSDE+XG4iOwpwcmludCAiPHRhYmxlIGJvcmRlcj0xPlxuIjsKcHJpbnQgIjx0cj48dGg+U3Bpcml0PC90aD48dGg+RGlzdHJpYnV0b3I8L3RoPjx0aD5UeXBlPC90aD48dGg+QWxjL1ZvbDwvdGg+PHRoPlNpemU8L3RoPjx0aD5PcmlnaW48L3RoPjwvdHI+XG4iOwoKZm9yICRzcGlyaXROYW1lIChzb3J0IGtleXMgJW15U3Bpcml0cyApIHsKICAgICRkaXN0cmlidXRvciA9ICRteVNwaXJpdHN7JHNwaXJpdE5hbWV9eydkaXN0cmlidXRvcid9OwogICAgJHR5cGUgPSAkbXlTcGlyaXRzeyRzcGlyaXROYW1lfXsndHlwZSd9OwogICAgJGFsY3ZvbCA9ICRteVNwaXJpdHN7JHNwaXJpdE5hbWV9eydhbGN2b2wnfTsKICAgICRzaXplID0gJG15U3Bpcml0c3skc3Bpcml0TmFtZX17J3NpemUnfTsKICAgICRvcmlnaW4gPSAkbXlTcGlyaXRzeyRzcGlyaXROYW1lfXsnb3JpZ2luJ307CnByaW50ICI8dHI+PHRkPiRzcGlyaXROYW1lPC90ZD48dGQ+JGRpc3RyaWJ1dG9yPC90ZD48dGQ+JHR5cGU8L3RkPjx0ZD4kYWxjdm9sPC90ZD48dGQ+JHNpemU8L3RkPjx0ZD4kb3JpZ2luPC90ZD48L3RyPlxuIjsKfQpwcmludCAiPC90YWJsZT5cbiI7CnByaW50ICI8L2JvZHk+XG4iOwpwcmludCAiPC9odG1sPlxuIjsKCnByaW50ICJcblxuWE1MIGZpbGUgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiBteSBTcGlyaXRzIC0gYnkgU3Bpcml0IE5hbWUgYXNjZW5kaW5nOlxuXG4iOwoKcHJpbnQgIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG4iOwpwcmludCAiPHNwaXJpdHM+XG4iOwoKZm9yICRzcGlyaXROYW1lIChzb3J0IGtleXMgJW15U3Bpcml0cyApIHsKCiAgICBwcmludCAiIDxzcGlyaXQ+XG4iOwoKICAgICRkaXN0cmlidXRvciA9ICRteVNwaXJpdHN7JHNwaXJpdE5hbWV9eydkaXN0cmlidXRvcid9OwogICAgJHR5cGUgPSAkbXlTcGlyaXRzeyRzcGlyaXROYW1lfXsndHlwZSd9OwogICAgJGFsY3ZvbCA9ICRteVNwaXJpdHN7JHNwaXJpdE5hbWV9eydhbGN2b2wnfTsKICAgICRzaXplID0gJG15U3Bpcml0c3skc3Bpcml0TmFtZX17J3NpemUnfTsKICAgICRvcmlnaW4gPSAkbXlTcGlyaXRzeyRzcGlyaXROYW1lfXsnb3JpZ2luJ307CiAgICBwcmludCAiIFxuIjsKCiAgICBwcmludCAiIDwgc3Bpcml0TmFtZT4kIHNwaXJpdE5hbWU8LyBzcGlyaXROYW1lPlxuIjsKICAgIHByaW50ICIgPCBkaXN0cmlidXRvcj4kZGlzdHJpYnV0b3I8LyBkaXN0cmlidXRvcj5cbiI7CiAgICBwcmludCAiIDwgdHlwZT4kdHlwZTwvIHR5cGU+XG4iOwogICAgcHJpbnQgIiA8IGFsY3ZvbD4kYWxjdm9sPC8gYWxjdm9sPlxuIjsKICAgIHByaW50ICIgPCBzaXplPiRzaXplPC8gc2l6ZT5cbiI7CiAgICBwcmludCAiIDwgb3JpZ2luPiRvcmlnaW48LyBvcmlnaW4+XG4iOwogICAgcHJpbnQgIiA8L3NwaXJpdD5cbiI7Cn0KcHJpbnQgIjwvc3Bpcml0cz5cbiI7