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

  

  

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. Java生成二维码QRCode.jar

    所需jar包:QRCode.jar:http://download.csdn.net/detail/xuxu198899223/7717745 package ewm; import java.awt ...

  2. [ci] jenkins的Timestamper插件-让日志显示时间

    jenkins的Timestamper插件-让jenkins console带时间戳 安装插件 配置pipline,使用timestamp - 官网有说怎么用: 即用timestamps{} 包裹所有 ...

  3. Flask教程 —— Web表单(上)

    第二章中介绍的request对象公开了所有客户端发送的请求信息.特别是request.form可以访问POST请求提交的表单数据. 尽管Flask的request对象提供的支持足以处理web表单,但依 ...

  4. express 设置node_env的环境变量

    设置process.env.NODE_ENV的环境变量可以用以下2种方式: //在你的app.js文件中设置 process.env.NODE_ENV = 'development'; //在pack ...

  5. linux命令(28):Linux下SCP无需输入密码传输文件,python 中scp文件

    python 中scp文件:(如果下面的发送免密码已经完成的话,就直接能用下面这个) os.system('scp "%s" "%s:%s"' % (" ...

  6. How-to: Tune Your Apache Spark Jobs (Part 1)

    Learn techniques for tuning your Apache Spark jobs for optimal efficiency. When you write Apache Spa ...

  7. 基于jQuery悬停弹出遮罩显示按钮代码

    今天给大家分享一款基于jQuery悬停弹出遮罩显示按钮代码.这是是一款当鼠标悬停在图片上后,会出现一系列的按钮,文字等弹性动画效果.效果图如下: 在线预览   源码下载 实现的代码. html代码: ...

  8. Android Studio使用心得

    说实话 開始接触这个工具 真的认为非常恶心 毕竟大陆被墙  非常多东西用起来不是非常方便 并且Eclipse转到Android Studio还是一个跨度 废话不多说  以下 讲下我遇到的问题 1. 安 ...

  9. 【转】【Unity】四元数(Quaternion)和旋转

    http://blog.csdn.net/candycat1992/article/details/41254799

  10. Linux 完整的修改用户名,用户组的方法记录

    今天将虚拟机内所有的用户都是统一规划自己的名字,方便识别操作,特记录相关修改Linux 用户名以及修改用户组的方法 第一种方式,直接改相关文件: /etc/passwd 如图所示,改为自己想用户名,描 ...