年中アイス

いろいろつらつら

読み込んだ行の改行削除

perl初めて扱ったときに読んだ行の改行の扱いについて違ったのでメモ。

Javaの場合だと、とりあえず、BufferedReaderとか使って1行読んで、その行に対して処理を書く。このとき行末の改行は消え去っているので、特に気にすることなく処理を書く。

// BufferedReaderの宣言、open(),try〜catch,finallyは省略
String line;
while ((line = br.readLine()) != null) {
    // 読み込んだ行に対する処理
}

でも、perlでは行末の改行は削除されず、自分で削除する必要がある。そのため、chomp関数を使って改行を除去する。これを忘れると、printしたときに改行が変な位置に出たりする。

while (my $line = <STDIN>) {
    chomp($line);
    # 読み込んだ行に対する処理
}

chomp()の戻り値は、改行が含まれていたら1、含まれていなかったら0が返ってくる。

$line = chomp($line);

とか書いちゃうと、$lineに1や0が入ってしまう。1回やらかして頭に?マーク出てた。

最初perl扱った時に変に改行されたので調べてみたらperlでは当たり前のこと。。。コマンドラインから直接扱うのをJavaでは作ってなかったから、perl始めてちょっとギャップを感じたところ。