DBM::Deepでの配列がうまく動作しない
普段よくgdbmを使うのですが、DBM::Deepを使うと配列も使える人のことで試しているのですが、
ちょっと動作がおかしいです。私が何か間違えているかもしれませんので、一度見ていただければと思います。
---------------------------------
use DBM::Deep;
my @array;
tie @array, "DBM::Deep", "bar.db" ; # ★3
@array=(
[ "123" , "abc" ],
[ "456" , "def" ],
);
print qq($array[0][1]\n); # ★1
for my $ref(@array){
print "@$ref\n"; # ★2
}
---------------------------------
結果
---------------------------------
abc
---------------------------------
これを実行してみますと、★1はちゃんと表示されるのですが、★2が何も表示しません。どうもループにも入りません。。
ここで試しに★3をコメントにしてみますと・・
---------------------------------
結果
---------------------------------
abc
123 abc
456 def
---------------------------------
これはどういう事なのでしょうか?
DBM::Deepでは値の列挙ができない・・・のでしょうか。
それとも何か間違えていますでしょうか?
どうぞよろしくお願いします。
No.2ベストアンサー
- 回答日時:
連投すみません。
"自身"って...ほんと自信なくします。
あと、質問者さんのスクリプトはこちらではうまく動きました。
よって原因不明です。よく見もせずにすみませんでした。
ただ、インスタンスを捨ててしまっているので、データは保存されないのではないでしょうか?
この回答への補足
すぐにお返事出来なくて申し訳ありませんでした。
いろいろ試してみたのですが、原因不明でした・・・
調べている過程でStoreableというのを知りまして
どうやらこちらの方が使いやすそうだったのでDBM::deepの使用はやめることにしました。
ご回答ありがとうございました。感謝です!
No.1
- 回答日時:
こんにちは、
的を得ている自身はありませんが、
>tie @array, "DBM::Deep", "bar.db" ; # ★3
もしかして、インスタンスを捨ててしまっているからではないですか?
以下実験です。
#! perl
use strict;
use warnings;
use DBM::Deep;
use Data::Dumper;
#
my @array;
my $db = tie @array, 'DBM::Deep', 'foo.db';
@array=(
[ "123" , "abc" ],
[ "456" , "def" ],
);
print Dumper $_ for @array;
undef $db;
#
my $db2 = DBM::Deep->new(
file => 'foo.db',
type => DBM::Deep->TYPE_ARRAY
);
print Dumper $_ for @$db2;
--- 実行結果 ---
D:\>perl test.pl
$VAR1 = bless( [
'123',
'abc'
], 'DBM::Deep::Array' );
$VAR1 = bless( [
'456',
'def'
], 'DBM::Deep::Array' );
$VAR1 = bless( [
'123',
'abc'
], 'DBM::Deep::Array' );
$VAR1 = bless( [
'456',
'def'
], 'DBM::Deep::Array' );
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- その他(プログラミング・Web制作) PythonでLoopを使って配列内の文字列を結合する。そして [] を削除する 1 2022/03/31 23:28
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- Excel(エクセル) EXCELで同一セル内で自動的に改行されてしまう(難問) 6 2023/04/16 00:51
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlでファイルの拡張子を除い...
-
非共通要素を抜き出す
-
VBAでの一時停止と再開の方法
-
プログラミングについて。 1つ...
-
画面を強制的に再描画させる方法
-
どなたかこのプログラミングを...
-
二次元配列のインデックスについて
-
高速に文字列の比較
-
perlで配列の要素が空なのを知...
-
文字列を変数名として扱う方法
-
Javaでゲーム
-
イベントの発生を待つ
-
Strawberry Perl for Windows ...
-
テキストボックスの名前に変数...
-
DOSコマンドのループ内のTIMEコ...
-
範囲指定したセルを1つずつ飛...
-
ハッシュ検索はなぜ速い
-
モンテカルロ法
-
VBAで3秒だけ時間を止めたい
-
VBのReturnの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データベースから取得したデー...
-
perlで2つの配列を比較する方...
-
DBIを使ってのデータの取り出し...
-
python質問
-
perlでファイルの拡張子を除い...
-
アルファベットn文字の組み合わ...
-
grep関数を用いた複数行からの抽出
-
乱数と順列と組み合わせ
-
半角文字の縦書き表示
-
配列やハッシュで中身が同じか...
-
ループ中でのmy宣言と処理速度
-
桁数指定と四捨五入
-
画面を強制的に再描画させる方法
-
VBAで3秒だけ時間を止めたい
-
VBAでの一時停止と再開の方法
-
VBのReturnの使い方
-
どなたかこのプログラミングを...
-
Escキーを押すと、中断する時と...
-
UWSCの終了の仕方
-
エクセルの当番表を作っていま...
おすすめ情報