アプリ版:「スタンプのみでお礼する」機能のリリースについて

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では値の列挙ができない・・・のでしょうか。

それとも何か間違えていますでしょうか?

どうぞよろしくお願いします。

A 回答 (2件)

連投すみません。



"自身"って...ほんと自信なくします。

あと、質問者さんのスクリプトはこちらではうまく動きました。

よって原因不明です。よく見もせずにすみませんでした。

ただ、インスタンスを捨ててしまっているので、データは保存されないのではないでしょうか?

この回答への補足

すぐにお返事出来なくて申し訳ありませんでした。

いろいろ試してみたのですが、原因不明でした・・・

調べている過程でStoreableというのを知りまして
どうやらこちらの方が使いやすそうだったのでDBM::deepの使用はやめることにしました。

ご回答ありがとうございました。感謝です!

補足日時:2010/10/03 20:51
    • good
    • 0

こんにちは、


的を得ている自身はありませんが、

>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' );
    • good
    • 0

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