Perl:修剪字符串前导和尾随空格的函数

Lan*_*uhn 78 perl

是否有内置函数来修剪前导和尾随空格trim(" hello world ") eq "hello world"

Mar*_*ers 82

这是使用正则表达式的一种方法:

$string =~ s/^\s+|\s+$//g ;     # remove both leading and trailing whitespace
Run Code Online (Sandbox Code Playgroud)

Perl 6将包含一个修剪功能:

$string .= trim;
Run Code Online (Sandbox Code Playgroud)

资料来源:维基百科

  • 我每个月都会看一次.太糟糕了,我不能每次都投票. (5认同)

Eth*_*her 81

这在String :: Util中可用,trim方法如下:

编者按:String::Util是不是一个核心模块,但你可以从安装CPAN[sudo] cpan String::Util.

use String::Util 'trim';
my $str = "  hello  ";
$str = trim($str);
print "string is now: '$str'\n";
Run Code Online (Sandbox Code Playgroud)

打印:

字符串现在是'你好'

但是你自己很容易做到:

$str =~ s/^\s+//;
$str =~ s/\s+$//;
Run Code Online (Sandbox Code Playgroud)

  • 为什么每个人都应该使用 CPAN 的模块?将 Linux 发行版(debian、redhat、ubuntu)中的 perl 与手动安装的 CPAN 模块结合使用时,会导致一致性变得困难。如果可以使用在 linux 发行版中作为包提供的模块在 perl 中完成某些事情会更好 (3认同)
  • 我知道它们也来自 CPAN...是的,通常我可以为 debian 请求一个新的 pkg,但它对我安装的 debian 稳定版本没有帮助...这就是为什么我更喜欢包模块,但如果直接使用 CPAN真的需要。 (2认同)
  • @Ether在所有应有的尊重下,我非常感谢知道这是一个非核心模块。这篇文章讨论的是使用模块代替相当简单的正则表达式单行代码。如果模块是核心模块,那么我将更加开放。在这种情况下很重要。 (2认同)

Eug*_*ash 26

没有内置trim函数,但您可以使用简单的替换轻松实现自己的函数:

sub trim {
    (my $s = $_[0]) =~ s/^\s+|\s+$//g;
    return $s;
}
Run Code Online (Sandbox Code Playgroud)

或在Perl 5.14及更高版本中使用非破坏性替换:

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}
Run Code Online (Sandbox Code Playgroud)


Nan*_*nne 8

完整的指导如下:http://learn.perl.org/faq/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning-end-of-a-string-