在我的Perl代码中,我正在访问一封电子邮件。我需要在其中获取表并将其解析为数组。 我是用它做的:
my @plain = split(/\n/,$plaintext);
但是,@plain
中有许多空白元素。它有572个元素,其中大约一半是空的。
我在这里做错了吗?我需要在代码中添加/更改哪些内容才能删除空白元素?
答案 0 :(得分:14)
grep
输出,因此您只能获得包含非空白字符的条目。
my @plain = grep { /\S/ } split(/\n/,$plaintext);
答案 1 :(得分:4)
正确的方法是来自@ dave-cross的here
如果您没有修复分割,请快速而肮脏:
foreach(@plain){
if( ( defined $_) and !($_ =~ /^$/ )){
push(@new, $_);
}
}
编辑:如何运作
与上述相比,将有更优雅和有效的方式,但与所有perl-y tmtowtdi一样!这种方式的工作原理是:
循环遍历数组@plain
,将$_
设置为当前数组元素
foreach(@plain){
检查当前元素,看看我们是否对它感兴趣:
( defined $_) # has it had any value assigned to it
!($_ =~ /^$/ ) # ignore those which have been assigned a blank value eg. ''
如果当前元素通过了那些检查,则将其推送到@new
push(@new, $_);
答案 2 :(得分:1)
您的代码中需要添加一行,并且可以正常使用
@plain= grep { $_ ne '' } @plain;
答案 3 :(得分: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