之前一直以为chomp函数只是去掉字符串末尾的 , 但是今天写程序遇到一个bug,最后的原因就处在chomp上;
读取fasta文件,内容如下:
>1 ATGCTAGCTACGTACGTACGTTTTTTTTT >2 ACGATCGACGATCGTACGTACGTACGATT >3 ATGCATGCTATACATCAGCTAATATCGCT
perl中$/代表默认的输入记录的分隔符;这里将$/设置为">":
#!/usr/bin/perl use warnings; use strict; my ($fasta) = @ARGV; open FASTA, $fasta or die "Can't open $fasta"; local $/ = ">"; while (<FASTA>) { s/ //g; print qq{$_n}; } close $fasta; $/ = " ";
运行这段代码,输出结果如下:
> 1ATGCTAGCTACGTACGTACGTTTTTTTTT> 2ACGATCGACGATCGTACGTACGTACGATT> 3ATGCATGCTATACATCAGCTAATATCGCT
可以看出,$/的值出现在每行的最后;接下来使用chomp函数
#!/usr/bin/perl use warnings; use strict; my ($fasta) = @ARGV; open FASTA, $fasta or die "Can't open $fasta"; local $/ = ">"; while (<FASTA>) { chomp; s/ //g; print qq{$_n}; } close $fasta; $/ = " ";
输出结果为:
1ATGCTAGCTACGTACGTACGTTTTTTTTT 2ACGATCGACGATCGTACGTACGTACGATT 3ATGCATGCTATACATCAGCTAATATCGCT
第一行因为是空行,这里没显示出来;可以看到每行末尾的>符号被去除了,所以chomp的真正作用是去除字符串末尾的$/,只是因为默认情况下
$/为 ,造成chomp就是去除 的假象;