为什么chomp不能删除我的字符串周围的空格?

时间:2017-09-11 13:58:00

标签: perl

我不明白为什么perl chomp没有删除我的字符串周围的空白。我甚至尝试过两次叫chomp,例如,使用bash:

$ perl -e 'use 5.22.4; chomp(my $extra=" lol "); chomp($extra); say "<$extra>"'
< lol >

我真的希望得到

<lol>

3 个答案:

答案 0 :(得分:7)

Chomp只从字符串末尾删除行结尾(可以用$/变量设置)。它没有修剪弦乐。 Perl没有内置修剪功能。我通常会拼出两个替换词:

s/^\s+//, s/\s+$// for $string;

进一步阅读:

答案 1 :(得分:4)

删除所有空格:

$string =~ s/\s+//g;

左侧修剪:

$string =~ s/^\s+//;

右边修剪:

$string =~ s/\s+$//;

左右修剪:

$string =~ s/^\s+|\s+$//g

然后我们也可以构建修剪功能。这有助于更大的脚本,你不想每次都写完整的替换字符串,我们写一次,然后使用函数来完成工作。

这个简单的函数可以在任何脚本中用作trim($string);

sub trim {
    $_[0] =~ s/^\s+|\s+$//g;
 }

与完整的空白条相似。

 sub full_strip {
    $_[0] =~ s/\s+//g;
 }
脚本中的

use strict;
use warnings;
my $string = "  this is line with leading and trailing whitespaces  ";
my $string2 = "         another one of those lines ";

trim($string);
trim($string2);

print "$string\n";
print "$string2\n";

full_strip($string);
full_strip($string2);

print "$string\n";
print "$string2\n";


sub trim {
    $_[0] =~ s/^\s+|\s+$//g;
   }

sub full_strip {
    $_[0] =~ s/\s+//g;
   }

答案 2 :(得分:0)

$string=~s/^\s+|\s+$//g;

这适用于要删除开始和结束空格的任何通用字符串。