人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlに関する質問です。深沢千尋さんの「すぐわかるPerl」を勉強しているのですが、
p243のdbmの項目で、下記プログラムを実行するのですが、%tankaがハッシュ化されていません。
何か間違いがあるでしょうか?

$dbname = "kudamono_db"; #dbmデータベースの規定ファイル名をここに埋め込む

dbmopen(%tanka,$dbname,undef) or die "can't open dbm:".$dbname;
while(<STDIN>){
($kudamono,$kosuu)=split;
print "$kudamono\t$tanka{$kudamono}\t$kosuu\t".
$tanka{$kudamono}*$kosuu."\n";
}
dbmclose(%tanka);

●質問者: tsubasa yagi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
●100ポイント ベストアンサー

その本を読んだわけじゃないですが、おそらくこのプラグラムは、「kudamono_db」という DBM のファイルに、名称とその単価のデータが既に入っていて、名称と個数を入力すると、「名称」「単価」「個数」「総額」が表示される、という意図のプログラムだと思います。


なので、そもそも「kudamono_db」に名称と単価のデータが入っている事が前提で、入力した名称に該当するデータが無ければ、$tanaka{$kudamono} は何も表示されず、$tanka{$kudamono} * $kosuu は 0 になります。


おそらく、この例が出ている前後に、DBM のファイルを作るプログラム例があると思います。そのプログラムで DBM ファイルを作った後に、このプログラムを実行すると、意図した結果が得られると思います。


追記:

ご指摘のdbmはもちろん事前に作ってあります。

とりあえず、そのファイルが正しくできているか、というのは確認してますか?


DBM のファイルが正しく出来ていれば、下記のようなコードで、中身を表示する事ができます。

use Data::Dumper;

$dbname = "kudamono_db";
dbmopen(%tanka, $dbname, undef) or die "can't open dbm:".$dbname;

print Dumper(\%tanka);

dbmclose(%tanka);

中身が入っていれば、下記のような出力が得られるはずです。

$VAR1 = {
 'apple' => '100',
 'banana' => '50'
 };
◎質問者からの返答

ご回答ありがとうございます。

ご指摘のdbmはもちろん事前に作ってあります。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ