zoukankan      html  css  js  c++  java
  • perl chomp 函数的真正作用

    之前一直以为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就是去除 的假象;

      

      

  • 相关阅读:
    js 几个特殊情况
    Oracle 常用操作
    SqlServer性能检测和优化工具使用详细
    Fiddler
    JMeter性能测试,完整入门篇
    asp.net缓存
    Quartz.net开源作业调度框架使用详解
    SQL 存储过程
    .net 分布式锁
    全国省市区数据库
  • 原文地址:https://www.cnblogs.com/xudongliang/p/5127131.html
Copyright © 2011-2022 走看看