chomp 和 $/

【转】[Perl]chomp 和 $/

chomp用来去掉字符串结尾的空行,这是我之前的理解。

今天仔细看了chomp的文档,原来chomp不一定只用来删除字符串结尾的空行,它可以删除结尾的$/, 只不过$/的默认值是newline,所以给人的感觉chomp总是用来删除结尾的空行。

通过改变$/的默认值,可以让chomp变得更灵活。
比如你的某个变量$var结尾有多个空行,怎么删除呢?
可以:
$/="";
chomp($var);

如果$var的结尾是a,你想删除a, 
$/="a";
chomp($var);
再比如windows 文件换行符为”\r\n“,这时候可以:(但是记住!在后面针对linux文件继续用chomp的时候,一定要把$/改回来,即改成$/ = "\n")
$/="\r\n";
chomp;

=========================================

有网友说我的斜线写反了。查了查perlvar, 发现 $\ 和$/是两个不同的东西:
$/: The input record separator, newline by default.
$\: The output record separator for the print operator.
chomp:  removes any trailing string that corresponds to the current value of $/

发现后来别人给我的文件各种奇葩的格式都有,有的chomp之后行末还是会有空格。那么这个时候:
$_ =~ s/\s+$//;         #####将末尾的空格,换行符都去掉,可以代替chomp;而且更好用些。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
翻译代码#####################Find the relevant software in the systerm######################## my $nucmer="/usr/bin/nucmer"; my $deltaFilter="/usr/bin/delta-filter"; my $showcoords="/usr/bin/show-coords"; my $minimap2="/usr/bin/minimap2"; if (($MappingSoft eq "mummer") or ($MappingSoft eq "nucmer")) { # mummer-4.0.0/bin/nucmer # mummer-4.0.0/bin/delta-filter # mummer-4.0.0/bin/show-coords if ( !(-e $nucmer) ) { $nucmer=`which nucmer 2> /dev/null `;chomp $nucmer; } if ( !(-e $deltaFilter) ) { $deltaFilter=`which delta-filter 2> /dev/null `;chomp $deltaFilter; } if ( !(-e $showcoords) ) { $showcoords=`which show-coords 2> /dev/null `;chomp $showcoords; } if (defined $BinDir) { my $tmp="$BinDir/nucmer"; if (-e $tmp) {$nucmer=$tmp;} $tmp="$BinDir/delta-filter"; if (-e $tmp) {$deltaFilter=$tmp;} $tmp="$BinDir/show-coords"; if (-e $tmp) {$showcoords=$tmp;} } if ( !(-e $showcoords) ) { print "\tCan't find the mummer [show-coords] at \$PATH or \$BinDir\n"; print "\tplease Check at it\n";exit; } if ( !(-e $deltaFilter) ) { print "\tCan't find the mummer [delta-Filter] at \$PATH or \$BinDir\n"; print "\tplease Check at it\n";exit; } if ( !(-e $nucmer) ) { print "\tCan't find the mummer [nucmer] at \$PATH or \$BinDir\n"; print "\tplease Check at it\n";exit; } my $NumVer=`$nucmer -V `; chomp $NumVer ; my @ccc=split /\./,$NumVer; if ($ccc[0] <4 ) { print "found the $nucmer version is $NumVer < 4.0 , we need the 4.0\n"; print "\tplease Check at it\n";exit; } } else { if ( !(-e $minimap2) ) { $minimap2=`which minimap2 2> /dev/null `;chomp $minimap2; } if (defined $BinDir) { my $tmp="$BinDir/minimap2"; if (-e $tmp) {$minimap2=$tmp;} } if ( !(-e $minimap2) ) { print "\tCan't find the [ minimap2 ] at \$PATH or \$BinDir\n"; print "\tplease Check at it\n";exit; } } my $NGenomeSyn="$Bin/../NGenomeSyn"; if ( !(-e $NGenomeSyn) ) { $NGenomeSyn="$Bin/NGenomeSyn"; if ( !(-e $NGenomeSyn) ) { print "\tCan't find the [NGenomeSyn] at [ $Bin/..]\n"; print "\tplease Check at it\n";exit; } }
最新发布
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值