配列をファイルに記録するには?

[上に] [前に] [次に]
じぇい 1999/05/16(日) 23:57:59
要素が2つだけの配列があるんですが、それをファイルに記録するのに、
print OUT "@a[0]";
print OUT "@a[1]";
ってやってるんですが、どうも変な気がしたので質問してみました。
もっと簡単にする方法を教えてください。
ちなみにPerlの話です。

B-Cus 1999/05/17(月) 00:22:45
 print OUT @a;
 print OUT "@a";
 print OUT join(",",@a);
 print OUT join("\n",@a);
などなど。それぞれ結果が違うので試してみてください。

> print OUT "@a[0]";

そもそもこれは間違いです。-w オプションを付けてコマンドラインで
実行すると warning がでます。
 print OUT "$a[0]";
が正解。

じぇい 1999/05/17(月) 01:09:21
[[解決]]
@a[0]
・・・やってしまいました。(笑)
スクリプトのほうではちゃんと$a[0]ってやってるんですけどね。
たぶん僕がやりたいのは
 print OUT "@a";
のような気がします。
どうもありがとうございました。

じぇい 1999/05/17(月) 01:13:14
あっ、、すいません。解決を押してしまったのですが、、
 print OUT @a;
と、
 print OUT "@a";
はどう違うのですか?

下の二つが違うのはわかります。

じぇい 1999/05/17(月) 01:36:45
とりあえず結果報告します。
 print OUT @a;
のほうでうまくいきました。
 print OUT "@a";
のほうではうまく動作しませんでした。
何が違うのでしょうか、、?

tre [E-Mail] 1999/05/17(月) 06:21:53
僕も、気になっていたんですが。
掲示板などを作って配列に、データをいれて、
print OUT "@data";
と、すると勝手にインデントしてしまう。
name,addr,url,msg
--name,addr,url,msg
----....
..
なぜでしょうか?

B-Cus 1999/05/17(月) 17:50:45
>  print OUT "@a";
> のほうではうまく動作しませんでした。

定義済の配列に対して
 print OUT "@a";
とすれば動くはずですので、試して違いを確かめてみてください。

じぇい 1999/05/17(月) 22:37:20
定義済みの配列というのはどういうことですか?(理解力に乏しくてすいません。)
上のtreさんと同じ疑問なのですが、配列を
print OUT "@a";
でファイルに保存すると勝手に空白が入ってしまいます。
なぜなのでしょうか?

B-Cus 1999/05/18(火) 01:46:03
> 定義済みの配列というのはどういうことですか?

perl4では
 #!path_of_perl4
 print "@a";
はエラーになりませんが、perl5では
 #!path_of_perl5
 print "@a";
はエラーになります。未定義(という用語が適切かどうかわかりませんが)の
@aという配列を参照しているからです。

ですから、
 #!path_of_perl5
 @a=(1,2,3);
 print "@a";
などと一度@aを定義してから、それを参照してほしいという意味で
「定義済の配列」と書きました。

> 勝手に空白が入ってしまいます。

そういう仕様である、ということでしょうね。
 print OUT @a = print OUT join("",@a)
 print OUT "@a" = print OUT join(" ",@a)

じぇい 1999/05/18(火) 02:19:19
なるほど。そういう仕様なんですね。
とてもわかりやすいご説明どうもありがとうございました。

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