Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 222
  • Last Modified:

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.

0
sjaguar13
Asked:
sjaguar13
  • 6
  • 5
1 Solution
 
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
 
ozoCommented:
%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
 
sjaguar13Author Commented:
Still nothing, just a blank page.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
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

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now