perl chomp 函數的真正作用


之前一直以為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的假象;

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM