之前一直以为chomp函数只是去掉字符串末尾的\n, 但是今天写程序遇到一个bug,最后的原因就处在chomp上;

读取fasta文件,内容如下:

  1. >1
  2. ATGCTAGCTACGTACGTACGTTTTTTTTT
  3. >2
  4. ACGATCGACGATCGTACGTACGTACGATT
  5. >3
  6. ATGCATGCTATACATCAGCTAATATCGCT

perl中$/代表默认的输入记录的分隔符;这里将$/设置为">":

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4.  
  5. my ($fasta) = @ARGV;
  6.  
  7. open FASTA, $fasta or die "Can't open $fasta";
  8. local $/ = ">";
  9. while (<FASTA>) {
  10. s/\n//g;
  11. print qq{$_\n};
  12. }
  13. close $fasta;
  14. $/ = "\n";

运行这段代码,输出结果如下:

  1. >
  2. 1ATGCTAGCTACGTACGTACGTTTTTTTTT>
  3. 2ACGATCGACGATCGTACGTACGTACGATT>
  4. 3ATGCATGCTATACATCAGCTAATATCGCT

可以看出,$/的值出现在每行的最后;接下来使用chomp函数

  1. #!/usr/bin/perl
  2. use warnings;
  3. use strict;
  4.  
  5. my ($fasta) = @ARGV;
  6.  
  7. open FASTA, $fasta or die "Can't open $fasta";
  8. local $/ = ">";
  9. while (<FASTA>) {
  10. chomp;
  11. s/\n//g;
  12. print qq{$_\n};
  13. }
  14. close $fasta;
  15. $/ = "\n";

输出结果为:

  1. 1ATGCTAGCTACGTACGTACGTTTTTTTTT
  2. 2ACGATCGACGATCGTACGTACGTACGATT
  3. 3ATGCATGCTATACATCAGCTAATATCGCT  

第一行因为是空行,这里没显示出来;可以看到每行末尾的>符号被去除了,所以chomp的真正作用是去除字符串末尾的$/,只是因为默认情况下

$/为\n,造成chomp就是去除\n的假象;

  

  

perl chomp 函数的真正作用的更多相关文章

  1. Perl读取标准输入<STDIN>、读取文件输入<>和chomp函数

    读取标准输入<STDIN> <STDIN>表示从标准输入中读取内容,如果没有,则等待输入.<STDIN>读取到的结果中,如果没有意外,都会自带换行符. 例如,tes ...

  2. Perl 子程序(函数)

    1.Perl 子程序(函数)Perl 子程序也就是用户定义的函数.Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读. Perl 子程序可以出现在程序的任何地方,语法 ...

  3. JavaScript函数constructor的作用,意义

    前几天写了一片 如何用正确的姿势编写jQuery插件 有朋友拍砖,指正.再此谢谢! 讨论:指定函数的constructor作用到底是什么? 我们一般写jQuery插件的时候是这样的: //构造函数 f ...

  4. C++入门经典-例9.1-函数模板,函数模板的作用,使用数组作为模板参数

    1:函数模板不是一个实在的函数,因此编译器不能为其生成可执行的代码.定义函数模板只是一个对函数功能框架的描述,在具体执行时,将根据传递的实际参数决定其功能. 2:函数模板定义的一般形式如下: temp ...

  5. php页面最大执行时间 set_time_limit函数不起作用

      作者: default|标签:PHP set_time_limit 执行时间|2017-3-21 15:03   set_time_limit 不生效或者无效解决方法 <?php globa ...

  6. Perl printf 函数

    转载 Perl printf 函数

  7. Perl exists 函数和defined函数的区别

    Perl exists 函数和defined函数的区别

  8. Perl参考函数

    这是标准的Perl解释器所支持的所有重要函数/功能的列表.在一个函数中找到它的详细信息. abs - 绝对值函数 accept - 接受传入的socket连接 alarm - 调度一个SIGALRM ...

  9. Perl回调函数和闭包

    在Perl中,子程序的引用常用来做回调函数(callback).闭包(closure),特别是匿名子程序. 回调函数(callback) 关于什么是回调函数,见一文搞懂:词法作用域.动态作用域.回调函 ...

随机推荐

  1. mysql特殊语句学习

    一.Mysql ON子句和USING子句 Mysql 中联接SQL语句中,ON子句的语法格式为:table1.column_name = table2.column_name. 当模式设计对联接表的列 ...

  2. java jvm perf

    http://www.oracle.com/technetwork/java/performance-138178.html http://www.oracle.com/technetwork/jav ...

  3. 每日英语:China Underwhelmed After First Apple Event

    Apple's roll-out of its latest iPhones landed with a thud in China, the company's biggest foreign ma ...

  4. 如何創建一個自己的 Composer/Packagist 包 (PHP)

    如何創建一個自己的 Composer/Packagist 包 首先讓我們踏着歡快的腳步去Github創建一個新庫,這裏取名 composer-car,又歡快的將它克隆到本地: git clone ht ...

  5. 技术blog链接

    http://www.cnblogs.com/anrainie/ 蔡羽 基础知识漫谈 http://blog.csdn.net/ioio_jy 姜晔的技术专栏 从苏宁电器到卡巴斯基

  6. Punycode转中文

    package cn.cnnic.ops.udf; public class GetChineseFromPunycode { static int TMIN = 1; static int TMAX ...

  7. JavaScript高级 面向对象(9)--深拷贝代码实现

    说明(2017.4.1): 1. 深拷贝要把对象里的“方法”也复制一份出来,“方法”里的“方法和属性”再判断深浅进行拷贝. 2. 办法就是写一个函数deepCopy,里面判断深浅拷贝,然后每个对象都添 ...

  8. plsql 只能识别32位的oracle解决办法

    http://www.cnblogs.com/ymj126/p/3712727.html#undefined

  9. vim同时打开多个文件进行编辑

    在A文件中用:tabedit B 就打开了B文件,然后用gt来切换进入A 或B文件中: 如果打开多个,就用 1gt ,2gt来切换至不同的文件:返回上一个文件用gT

  10. 基于java反射的javabean和map相互转换的工具类

    话不多说,代码如下 package com.study; import java.lang.reflect.Field; import java.util.HashMap; import java.u ...