- ベストアンサー
@の配列変数ではなく$のスカラー変数でデータを取り込みたい
prel作成中で壁にぶつかってしまったので質問させてください。 以下のプログラムでdata.txtのデータを$dataに読み込みます。 $datfile = "./data.txt"; open(IN,"<$datfile"); $data = <IN>; close(IN); data.txtのデータは以下のものが入ってます。 --------------- 田中 石田 佐藤 --------------- @dataとすると取り込み出来るのは分かったのですが、どうしても$dataでとりたく思ってます。 上記のスクリプトの場合は、先頭の行の「田中」のみ格納されてしまってます。 改行されていても、1つの変数として取り扱いたいです。 不足している内容があるかもしれません。 すみません。よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
$data = do {local $/ = undef; <IN> }; こう書けば、他の所の$/には影響しないです。
その他の回答 (3)
- kirikirkaz
- ベストアンサー率60% (21/35)
配列として評価しながら、取ってきた行全部をくっつけるのはどうですか? $data = join("", <IN>);
お礼
kirikirkazさん。ありがとうございます。 なるほど、このような方法もあるのですね。 とっても助かります!! ありがとう!!
- zxcv0000
- ベストアンサー率56% (111/196)
> それ以降のものが配列変数で正常に入らなくなってしまいました。 それ以降のファイル入力が行単位にできないと言う事ですね? 全部読みが終った時点で $/ を復元すれば良いです。 例えば... open(IN,"<$datfile"); my $irs = $/; undef($/); $data = <IN>; $/ = $irs; close(IN); もうちょっと高度な方法もあります。 input_record_separator で検索してみてください。
お礼
ありがとうございます!! 今、試して見たのですがちょっとうまくいきませんでした。 ただ記述方法としてやっておいたほうが良いと思うので、この方法で対応しようと思います。
- zxcv0000
- ベストアンサー率56% (111/196)
open の直後に undef($/); を入れてください。
お礼
回答ありがとうございます。 undef($/); を入れましたら、データが綺麗に入りました。 ありがとうございます。 また今回のundef($/); を入れてしまうと、それ以降のものが配列変数で正常に入らなくなってしまいました。 解除(クリアー)する方法はあるのでしょうか?
お礼
Wernerさん 回答ありがとうございます。丁度締め切ろうと思ったのですが、とっても分かりやすい記述方法だったので、今確認いたしました。 バッチリです!! 他にまったく影響がありませんでした。 ありがとうございます!!