perl:パターンマッチを使ったifの条件
perlでパターンマッチを使ったifの条件が必ずTRUEになってしまいます。
以下は条件です。二つのファイルがあって、片方のファイルのある列の文字列と別のファイルのある列の文字列が一致したら一致した行の1列目を出力するというプログラムです。
perl v5.12.3
『oct_gene.csv』は以下のような2列のファイルで、2列目であるalphabetの群は空白で区切られています。文字コードはASCIIです。
1 zinc finger protein of the cerebellum 3
0 stathmin-like 2
.
.
.
.
『RNA.csv』は以下のような3列のファイルで、3列目のalphabet群は同じく空白で区切られています。文字コードはUTF-8です。
1 NM_324891 sin3 associated polypeptide
2 NM_53344 Nanog homeobox
.
.
.
open (WRITE, ">RNAseq_Oct.csv");
open(FILE, "RNA.csv");
while($line = <FILE>){
chomp $line;
@fact = split /\t/, $line;
open(OCT, "oct_gene.csv");
while($octline = <OCT>){
chomp $octline;
@oct = split /\t/, $octline;
if($fact[2] =~ /$oct[1]/){
print WRITE $fact[2] . "\t" . $oct[1] ."\n";
last;
}
}
close (OCT);
}
close (FILE);
close (WRITE);
この中のif文がうまく働かず、whileで繰り返すまでもなく必ず if($fact[2] =~ /$oct[1]/) が成り立ってしまいます。
どなたか詳しい方、どうかご教示願います。
それではよろしくお願いします。
お礼
大変分かりやすく、そしてご丁寧な回答ありがとうございます。 処理に使用していた文字コードが別々だったようです。 そこで統一したところ、うまくいきました!! 大変助かりました。ありがとうございました。