11

在我的 Perl 代码中,我正在访问一封电子邮件。我需要获取其中的表并将其解析为一个数组。我是这样做的:

my @plain = split(/\n/,$plaintext);

但是, 中存在许多空白元素@plain。它有 572 个元素,其中大约一半是空的。

我在这里做错什么了吗?我需要在我的代码中添加/更改什么来摆脱空白元素?

4

4 回答 4

18

grep输出,因此您只能获得包含非空白字符的条目。

my @plain = grep { /\S/ } split(/\n/,$plaintext);
于 2012-07-06T15:21:45.687 回答
4

正确的方法来自@dave-cross

如果您不准备修复拆分,则快速而肮脏:

foreach(@plain){
    if( ( defined $_) and !($_ =~ /^$/ )){
        push(@new, $_);
    }
}

编辑:它是如何工作的

将有比上述更优雅和更有效的方法,但与 perl-y tmtowtdi 一样!它的工作方式是:

  1. 循环遍历数组@plain$_设置为当前数组元素

    foreach(@plain){

  2. 检查当前元素,看看我们是否对它感兴趣:

    ( defined $_) # has it had any value assigned to it !($_ =~ /^$/ ) # ignore those which have been assigned a blank value eg. ''

  3. 如果当前元素通过了这些检查,则将其推送到 @new

    push(@new, $_);

于 2012-07-06T14:23:03.243 回答
3

您的代码中需要添加一行,并且可以正常工作

   @plain= grep { $_ ne '' } @plain;
于 2017-10-13T20:55:00.077 回答
0

这是我用的,太晚了,但这个很好,以后可以用

$t = "1.2,3.4,3.12,3.18,3.27";
my @to = split(',',$t);
foreach $t ( @to ){
    push ( @valid , $t );
}
my $max = (sort { $b <=> $a } @valid)[0];
print $max
于 2015-04-24T11:22:25.917 回答