電子書籍の厳選無料作品が豊富!

Windows7でCygwinコマンドを使用しています。

コマンドに次の2通りを入力しました。

1.
$ head -2 data.csv
1000,-60
2000,-30
   ・
   ・

2.
$ perl test.pl <data.csv
1000,-60

2000,-30

   ・
   ・

test.plは次のように書きました。

for($line =0;$_ =<stdin>;$line++){
if($line < 5){
print"$_\n";
}
}

1つ目、2つ目ともにdata.csvのデータをコマンド上に出力していますが、どうして行間があったりなかったりしているのですか。

また、行間設定とかできるのですか。

A 回答 (2件)

ダイヤモンド演算子 <> は「改行」まで一緒に取り込みます。


$_ =<stdin>
で、$_に改行まで含めた1行が取り込まれています。

対策方法は次のいずれかです。(両方やったら今度は改行がなくなります)
・chomp関数などで末尾の改行を削除する。
・出力時によけいな改行を付けない。

今回程度ならどちらでもいいです。

過去の質問からして、このあと
@data=split(/,/) ;
等として利用するのではないか、と予想されます。
この場合、改行を取り除いておかないと、@dataの最後の要素が改行付きのものになります。
例: 10,11 → splitしたら
$data[0]='10';
$data[1]='11\n';
になります。


<>の使い方は、Perlの基礎です。
もうちょっと基礎を勉強した方がよくないですか?
    • good
    • 0
この回答へのお礼

丁寧なご説明ありがとうございます。

基本が全然分かっていませんでした。

お礼日時:2012/10/17 10:48

>print"$_\n";



print"$_";

ではないですか?
    • good
    • 0
この回答へのお礼

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

print"$_";に訂正すると行間がなくなりました。

お礼日時:2012/10/16 18:58

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