我在編寫Perl腳本時遇到了問題。操作和訪問哈希散列的內容
這是任務:
我的代碼工作正常,但有兩個問題。
我想添加一個元素到散列
%grocery
,其中包含類別,品牌和價格。添加項目時,首先系統會要求提供該類別。如果該類別不存在,則會從用戶添加新的類別,品牌和價格,但是如果該類別已經存在,那麼它將採用用戶的品牌名稱和價格,並將其附加到現有類別。
當我嘗試這樣做時,它會清除先前存在的項目。我希望以前的項目添加新添加的項目。
此問題與最大值有關。查找給定哈希中的最大價格。我爲此獲得了垃圾價值。
我在做什麼錯?
這裏是我的全碼:
use strict;
use warnings;
use List::Util qw(max);
use feature "switch";
my $b;
my $c;
my $p;
my $highest;
print "____________________________STORE THE ITEM_____________________\n";
my %grocery = (
"soap" => { "lux" => 13.00, "enriche" => 11.00 },
"detergent" => { "surf" => 18.00 },
"cleaner" => { "domex" => 75.00 }
);
foreach my $c (keys %grocery) {
print "\n";
print "$c\n";
foreach my $b (keys %{ $grocery{$c} }) {
print "$b:$grocery{$c}{$b}\n";
}
}
my $ch;
do {
print "________________MENU_________________\n";
print "1.ADD ITEM\n";
print "2.SEARCH\n";
print "3.DISPLAY\n";
print "4.FIND THE MAX PRICE\n";
print "5.EXIT\n";
print "enter your choice \n";
$ch = <STDIN>;
chomp($ch);
given ($ch) {
when (1) {
print "Enter the category you want to add";
$c = <STDIN>;
chomp($c);
if (exists($grocery{$c})) {
print "Enter brand\n";
$b = <STDIN>;
chomp($b);
print "Enter price\n";
$p = <STDIN>;
chomp($p);
$grocery{$c} = { $b, $p };
print "\n";
}
else {
print "Enter brand\n";
$b = <STDIN>;
chomp($b);
print "Enter price\n";
$p = <STDIN>;
chomp($p);
$grocery{$c} = { $b, $p };
print "\n";
}
}
when (2) {
print "Enter the item that you want to search\n";
$c = <STDIN>;
chomp($c);
if (exists($grocery{$c})) {
print "category $c exists\n\n";
print "Enter brand\n";
$b = <STDIN>;
chomp($b);
if (exists($grocery{$c}{$b})) {
print "brand $b of category $c exists\n\n";
print "-----$c-----\n";
print "$b: $grocery{$c}{$b}\n";
}
else {
print "brand $b does not exists\n";
}
}
else {
print "category $c does not exists\n";
}
}
when (3) {
foreach $c (keys %grocery) {
print "$c:\n";
foreach $b (keys %{ $grocery{$c} }) {
print "$b:$grocery{$c}{$b}\n";
}
}
}
when (4) {
print "\n________________PRINT HIGHEST PRICED PRODUCT____________________\n";
$highest = max values %grocery;
print "$highest\n";
}
}
} while ($ch != 5);
你有沒有被教過使用'given' /'when'?這是一個*實驗*功能,所以它的功能可能會改變,或者在將來的Perl版本中可能會完全消失。最好避免它。 – Borodin
不要使用單字符變量名稱,除非它們是像索引'$ i'或通用字符串'$ s'一樣建立的。 '$ a'和'$ b'是保留的標識符,應該完全避免。 – Borodin
完成任務後,我建議您在[codereview.se]上發佈它,然後我們會告訴您如何改進它。 – simbabque