在我的 Perl 代码中,我正在访问一封电子邮件。我需要获取其中的表并将其解析为一个数组。我是这样做的:
my @plain = split(/\n/,$plaintext);
但是, 中存在许多空白元素@plain
。它有 572 个元素,其中大约一半是空的。
我在这里做错什么了吗?我需要在我的代码中添加/更改什么来摆脱空白元素?
grep
输出,因此您只能获得包含非空白字符的条目。
my @plain = grep { /\S/ } split(/\n/,$plaintext);
正确的方法来自@dave-cross
如果您不准备修复拆分,则快速而肮脏:
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, $_);
您的代码中需要添加一行,并且可以正常工作
@plain= grep { $_ ne '' } @plain;
这是我用的,太晚了,但这个很好,以后可以用
$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