読者です 読者をやめる 読者になる 読者になる

chomp()関数はあまり使わないほうがいい

Cygwin Perl

Perlの話になります。

改行コードを取り除いてくれる便利な関数chomp(チョンプ)というものがありますが、この改行コードというのが実行環境に依存する形になります。

どういうことかと申しますと、Windows環境ならCRLF(\r\n)が改行文字になりますし、Linux環境ならLF(\n)が改行文字になります。

Cygwinのような環境でPerlコードを書いていると、改行コードがまちまちであることが往々にしてあります。そのような時は、chomp()を使うのではなく正規表現で改行コードを取り除くほうが安全です。

 

chomp($line);            # こう書くのではなく

$line =~ s/[\r\n]+\z//;  # こう書く

 

ちなみに...
\z は、行末。
[\r\n]+は、CRもしくはLFからなる一文字以上の集合。

s/変換元/変換先/ によって、どちらの環境の改行文字であっても、行末手前の改行コードを取り除いてくれるわけです。