【最大10000ポイント】当たる!!質問投稿キャンペーン!

perlが分かりません。
この度ドメイン変更に伴い、通販ソフトの入れ替えを行いましたが、そのチェックの際に、購入ボタンを
押すとCan't use an undefined value as a HASH reference at ../tk3lib/Design/TkBasketTable.pm line 662.
というエラーが出てしまいます。

該当箇所の近辺は、# 商品・在庫情報取得
GOODS:{
my %where = ( GoodsID=>$RecBasket{GoodsID} );
$GdsDB->load_data({ where=>\%where });
$StkDB->load_data({ where=>\%where });

%GoodsHash = (
FieldList => $GdsDB->{FieldList},
RecordList => $GdsDB->{RecordList},
RecordCount => $GdsDB->{RecordCount},
);
%StockHash = (
FieldList => $StkDB->{FieldList},
RecordList => $StkDB->{RecordList},
RecordCount => $StkDB->{RecordCount},
);
};
my @GoodsList = @{$GoodsHash{RecordList}};
my @StockList = @{$StockHash{RecordList}};
my %RecGoods = %{$GoodsList[0]};
my %RecStock = ();
%RecStock = %{$StockList[0]} if ($StockHash{RecordCount} > 0);

該当行は、下から3行目あたりになります。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

> 該当行は、下から3行目あたりになります



「あたり」と言われても困りますが...

>my %RecGoods = %{$GoodsList[0]};
だとすると、ここでundefine(未定義値)をハッシュとして使おうとしている、というエラーが出ているので、
$GoodsList[0] が undefine つまり、定義されていない
ということは、@GoodListが空のリスト、ということになります。
>my @GoodsList = @{$GoodsHash{RecordList}};
なので、$GoodsHash{RecordList}が空のリスト(へのリファレンス)となり
>%GoodsHash = (
> RecordList => $GdsDB->{RecordList},
なので、 $GdsDB->{RecordList} が空、ということになります。
>my %where = ( GoodsID=>$RecBasket{GoodsID} );
> $GdsDB->load_data({ where=>\%where });
なので、考えられるのは
・whereに一致するレコードが無い
・whereの条件が間違っている
・データベース自体が間違っている
のいずれかです。

とりあえず、 %RecStockと同様に、空かどうかの判定を入れて
my %RecGoods = () ;
%RecGoods = %{$GoodsList[0]} if ($GoodsHash{RecordCount} > 0);
とすれば、ここでのエラーは無くなるはずです。
正しい対処かどうかは、プログラム全体を見ないと判断できませんが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング