北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

固定長のCSVでやらかしました

すいませんすいませんすいません。

1,1,レコードA
2, ,レコードB
3,1,レコードC
4,1,レコードD

こんなファイル。2カラム目が有効フラグで、こいつが立ってる行だけ表示したかったとします。

open(my $fh, 'test.csv') or die;
while(<$fh>){
        tr/\r\n//d;
        my ($id, $enable, $text) = split(/,/, $_, 3);
        $enable or next;
        print $text, "\n";
}
close($fh);

こんなコード書いてバグりました。


なぜなら、このCSVは固定長で、フラグのカラムには'1'か' ' (空白) が入っているのです。レコードBも $enable は ' '(空白) で真になるので、全行表示されますorz