Hash of hashes problem

%product=();
print "Content-type: text/html\n\n";

open(DB, "filedb.txt");
@db = <DB>;
close(DB);

foreach $_ (@db){
($SDescription,$Price,$Key) = split(/\|/, $_);
chomp($Key);

$products{$key}={
price => $price,
description => $SDescription,
};

}

$blah = $products->{isi130}->{'price'};
print "$blah";





That does nothing. What am I doing wrong? I was a price and description for each key. Everytime I try to print one thing, it comes up blank.

sjaguar13Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
ozoConnect With a Mentor Commented:
%products=();
print "Content-type: text/html\n\n";

open(DB, "filedb.txt") or die $!;
@db = <DB>;
close(DB);

foreach( @db ){
    ($SDescription,$Price,$Key) = split(/\|/, $_);
    chomp($Key);

    $products{$Key}={
         price => $Price,
         description => $SDescription,
    };

}

$blah = $products{isi130}->{'price'};
print "$blah"
0
 
ozoCommented:
Name "main::Price" used only once: possible typo at 20322330.perl line 9 (#1)
   
    (W once) Typographical errors often show up as unique variable names.
    If you had a good reason for having a unique name, then just mention
    it again somehow to suppress the message.  The our declaration is
    provided for this purpose.
   
Name "main::key" used only once: possible typo at 20322330.perl line 12 (#1)
Name "main::product" used only once: possible typo at 20322330.perl line 1 (#1)
Name "main::price" used only once: possible typo at 20322330.perl line 13 (#1)
0
 
sjaguar13Author Commented:
Still nothing, just a blank page.
0
The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

 
ozoCommented:
Did you correct all the errors?
What is in filedb.txt?
0
 
sjaguar13Author Commented:
This is my script:

%products=();
print "Content-type: text/html\n\n";

open(DB, "filedb.txt") or die $!;
@db = <DB>;
close(DB);

foreach ( @db ){
($SDescription,$Price,$Key) = split(/\|/, $_);
chomp($Key);

print "hi"; #Test to make sure it enters the foreach
$products{$Key}={
price => $Price,
description => $SDescription,
};

print "$products{$key}->{'price'}"; #test to see if it prints the prices..it doesn't

}

$blah = $products{isi130}->{'price'};
print "$blah"; #nothing here


This is filedb.txt:
7 STRING DOUBLE CUTAWAY|299|isi130
NEW YORKER SOLIDTOP HOLLOWBODY ARCHTOP WITH CUTAWAY|Call|nyl-2vb
NEW YORKER SOLIDTOP HOLLOWBODY ARCHTOP WITH CUTAWAY|Call|nyl-2n
CUTAWAY HOLLOWBODY WITH 2 HUMBUCKERS|439|91203178
PRS STYLE WITH STOP TAILPIECE|489|isi342
PRS STYLE WITH SERPENT INLAY|539|c0501193
1972 RE-ISSUE TELECASTER THINLINE|399|dtt72sb
1972 RE-ISSUE TELECASTER THINLINE|399|ddt72blk
1972 RE-ISSUE TELECASTER THINLINE|399|dtt72cab
1972 RE-ISSUE TELECASTER THINLINE||399|ddt72n
STRAT STYLE WITH BRIDGE HUMBUCKER|199|FAT-210
STRAT STYLE WITH BRIDGE HUMBUCKER AND TREMELO|249|FAT-310
SEMI-HOLLOW BODY|759|r98h0538




Did I miss some errors?
0
 
ozoCommented:
Name "main::key" used only once: possible typo at 20322330.perl line 18 (#1)

You probably meant $Key
0
 
sjaguar13Author Commented:
Yep, you're right again! Changing it to $Key worked. One other thing, how did you get those error messages?
0
 
ozoCommented:
perl -w 20322330.perl
or
perl -Mdiagnostics -w 20322330.perl
0
 
sjaguar13Author Commented:
Does that work with Windows, or just linix?
0
 
ozoCommented:
It works with Windows or Unix
0
 
sjaguar13Author Commented:
So I type !#C:\perl\bin\perl.exe - 20322330.perl?
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.