在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
之前一直以为chomp函数只是去掉字符串末尾的\n, 但是今天写程序遇到一个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/\n//g; print qq{$_\n}; } close $fasta; $/ = "\n";
运行这段代码,输出结果如下: > 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/\n//g; print qq{$_\n}; } close $fasta; $/ = "\n";
输出结果为: 1ATGCTAGCTACGTACGTACGTTTTTTTTT 2ACGATCGACGATCGTACGTACGTACGATT 3ATGCATGCTATACATCAGCTAATATCGCT 第一行因为是空行,这里没显示出来;可以看到每行末尾的>符号被去除了,所以chomp的真正作用是去除字符串末尾的$/,只是因为默认情况下 $/为\n,造成chomp就是去除\n的假象;
|
请发表评论