dポイントプレゼントキャンペーン実施中!

prel作成中で壁にぶつかってしまったので質問させてください。

以下のプログラムでdata.txtのデータを$dataに読み込みます。

$datfile = "./data.txt";
open(IN,"<$datfile");
$data = <IN>;
close(IN);

data.txtのデータは以下のものが入ってます。
---------------
田中
石田
佐藤
---------------

@dataとすると取り込み出来るのは分かったのですが、どうしても$dataでとりたく思ってます。

上記のスクリプトの場合は、先頭の行の「田中」のみ格納されてしまってます。

改行されていても、1つの変数として取り扱いたいです。

不足している内容があるかもしれません。

すみません。よろしくお願いいたします。

A 回答 (4件)

$data = do {local $/ = undef; <IN> };



こう書けば、他の所の$/には影響しないです。
    • good
    • 0
この回答へのお礼

Wernerさん

回答ありがとうございます。丁度締め切ろうと思ったのですが、とっても分かりやすい記述方法だったので、今確認いたしました。

バッチリです!!

他にまったく影響がありませんでした。
ありがとうございます!!

お礼日時:2009/07/18 22:27

配列として評価しながら、取ってきた行全部をくっつけるのはどうですか?



$data = join("", <IN>);
    • good
    • 0
この回答へのお礼

kirikirkazさん。ありがとうございます。

なるほど、このような方法もあるのですね。
とっても助かります!!

ありがとう!!

お礼日時:2009/07/18 22:23

> それ以降のものが配列変数で正常に入らなくなってしまいました。



それ以降のファイル入力が行単位にできないと言う事ですね? 全部読みが終った時点で $/ を復元すれば良いです。 例えば...

open(IN,"<$datfile");
my $irs = $/;
undef($/);
$data = <IN>;
$/ = $irs;
close(IN);

もうちょっと高度な方法もあります。 input_record_separator で検索してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます!!

今、試して見たのですがちょっとうまくいきませんでした。
ただ記述方法としてやっておいたほうが良いと思うので、この方法で対応しようと思います。

お礼日時:2009/07/18 22:21

open の直後に undef($/); を入れてください。

    • good
    • 0
この回答へのお礼

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

undef($/);
を入れましたら、データが綺麗に入りました。
ありがとうございます。

また今回のundef($/); を入れてしまうと、それ以降のものが配列変数で正常に入らなくなってしまいました。

解除(クリアー)する方法はあるのでしょうか?

お礼日時:2009/07/18 15:22

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