如何从数组元素中删除前导和尾随空格?

Raj*_*Raj 8 perl

我有一个包含字符串的数组,该字符串可能包含附加到末尾的空格.我需要使用perl脚本删除这些空格.我的数组看起来像这样

@array = ("shayam    "," Ram        "," 24.0       ");
Run Code Online (Sandbox Code Playgroud)

我需要输出为

@array = ("shayam","Ram","24.0");
Run Code Online (Sandbox Code Playgroud)

我试过了chomp (@array).它不适用于字符串.

Zai*_*aid 35

基本问题围绕从字符串中删除前导和尾随空格,并且已经通过以下正则表达式替换(或其等价物)以某种形式或其他形式回答了多个线程:

s{^\s+|\s+$}{}g foreach @array;
Run Code Online (Sandbox Code Playgroud)

chomp数组将只删除尾随输入记录分隔符("\n"默认情况下).它不是为了删除尾随空格而设计的.

来自perldoc -f chomp:

当您担心最终记录可能缺少其换行符时,它通常用于从输入记录的末尾删除换行符.在段落模式($/ = "")中,它从字符串中删除所有尾随换行符.

...

如果您选择一个列表,则会对每个元素进行选择,并返回已删除的字符总数.


小智 1

#!/usr/local/bin/perl -w

使用严格;
使用数据::转储器;

我的@array=('a', 'b', 'c');

我的@newarray = grep(s/\s*$//g, @array);

打印转储器\@newarray;

这里的关键函数是 grep(),其他的都只是演示。

  • “地图”不是更合适吗? (5认同)
  • 我非常了解 grep 和 map,但我所说的是它们对我第一眼的“暗示”,并且考虑这些因素使代码更具可读性,因此更易于其他人维护。grep 的定义只是证实了这一点 - '那些表达式计算为 true 的元素' - 在这种情况下 *所有* 元素都被返回,所以这是不必要的混乱 - 如果我看到一个 grep 我开始寻找到底是什么与 grep 条件匹配,但如果我看到地图,我知道所有内容都将使用输入列表中的内容 (3认同)
  • (回复 Alan Horn)IMO 'grep' 建议在列表中搜索某些内容,'map' 表明将使用整个列表,因此在 'map' 更合适的情况下使用 'grep' 会使代码不太立即可读 (2认同)
  • 您的正则表达式仅删除末尾的空格,而不是开头的空格。 (2认同)