Perlでデータファイルに配列や連想配列を格納するには?

[上に] [前に] [次に]
ジバコ [E-Mail] 1999/08/20(金) 03:22:08
こんにちわ。
今回で2回目の質問です。

Perlでデータファイルに配列や連想配列を格納する方法がわからなくて困ってます。
具体的に言いますと、
log.datというファイルには
("1","hello")
とだけ書き、

cgiファイルのほうで、

open(LOG,"log.dat");
@log = <LOG>;
close(LOG);

print "Content-type: text/plain \n\n";
print $log[0];

というふうな処理をしたいのですが、
@log = <LOG>;
ここで連想配列としてlog.datを読み込もうと思うのですが
どうやらできていないのです。結果的に@log = ("1","hello");
としたいのですが。。

この問題を解決する方法、どなたか教えていただけませんか?
よろしくおねがいします。

葉月 1999/08/20(金) 09:02:51
>ここで連想配列としてlog.datを読み込もうと思うのですがどうやらできていないのです。

どう、できてないのかな? 読込後の、@logの中は空?
open(LOG,"log.dat");
@log = <LOG>;
close(LOG);
print $log[0];
だけで動作は、正常ですが...。思った値が@logにはいらないのかな?

ジバコ [E-Mail] 1999/08/20(金) 18:37:59
>>どう、できてないのかな? 読込後の、@logの中は空?

もう一度やってみましたが、@logの中身は空ではありませんでしたが、
連想配列としてではなく、文字列として読み込んでしまっているようです。

print $log[0];
とした時、

("1","hello")

と配列を文字列のまま表示されてしまうのです。
僕としては、

1

と表示されてほしいのです。
どうすれば解決できるのでしょうか?
よろしくおねがいします。

ふじ 1999/08/20(金) 19:16:41
ファイルに書き込む際に、

1
hello

と、改行を入れて書き込めば、
@log = <IN>;

@log = ("1", "hello");
と同じになります。

#ところで、連想配列と配列を混同してません?
#上記の話は全て普通の配列についての話ですが・・・

tre [E-Mail] [HomePage] 1999/08/21(土) 07:43:30

open IN, "log.dat" or die $!;
@log = eval "$_" while (<IN>);
close IN;

print $log[0];
これで、出来るかも。。
連想配列は、dbmとか使うと簡単に使えると思います。

ジバコ 1999/08/22(日) 20:44:45
[[解決]]
ありがとうございました。おかげでなんとかできるようになりました。
それと、dbmの事は、もうちょっと勉強してからトライしてみようと思います。

ありがとうございました。

[上に] [前に] [次に]