小ネタです, 忘備録として残しておきます.
PerlにはText::CSVという, CSV(Comma Separated Value)をパースするモジュールがあります. 一方で, TSV(Tab Separated Value)をパースするモジュールは, パッと見た感じいいのがなさそうでした.
解決策は以下の3つがありそうです:
split
など駆使して手動でパースする
一番素朴なのは, こういう感じで split
などを使って, タブを切り分ける方法でしょう($line
が1行のTSVとします).
my @fields = split /\t/, $line;
...とはいえ素朴ですし, エッジケース(あるのか?)に対応していないかも... という気がするので, なるべくよしなにモジュールの力を借りたいと思うかもしれません. そういう時は...
Text::CSV_XS::TSV を使う
結局のところ, CSVとTSVは似ている部分が多いので, 適切な設定をすればText::CSVでもTSVをパースできます. 例えばText::CSV_XS::TSVというCPANモジュールがあり, これはTSVを適切にパースできる設定が有効になったText::CSV_XSを提供する... というモノです.
Text::CSVのオプションを変更する
さて, Text::CSV_XS::TSVのドキュメントを鑑みると, もしText::CSVでTSVをパースしたいのであれば,, 次のように設定してあげると良さそうです:
my $tsv = Text::CSV->new({ sep_char => "\t", quote_char => undef, escape_char => undef, });
...多分, これが一番ベターだと思います.
とはいえ, Text::CSVはコアモジュールではないので, コアモジュール縛りで行くならsplit
を駆使する手を採用するということもあるでしょう.
TMTOWTDIということで, その時々で最適な選択肢を選んでTSVをパースしていけると良さそうです.