如何使用grep和shift从perl数组中删除项目?

时间:2011-09-09 14:50:30

标签: perl

我需要使用perl删除dataRecord中的数据记录符号和任何空行。

例如,

$/ = "__Data__"

__Data__
riririririr
djkfkdfjkdjkf
dghghghghghghg
(blank line)

     my @dataRecord = split(/\n/);
     grep(/(__Data__|/,@dataRecord);

如何根据grep过滤删除数组中不需要的项目?

3 个答案:

答案 0 :(得分:3)

这应该有效:

my @filered_list = grep { length( $_ ) and $_ ne '__Data__' } @dataRecord;

答案 1 :(得分:3)

不确定输入记录分隔符在这里发生了什么,除非使用隐式$_,否则split的使用无效。


要回答这个问题,请使用!运算符来否定匹配的意义:

@dataRecord = grep { ! /__Data__|^$/ } @dataRecord;

对于这种情况,!也可以替换为not

@dataRecord = grep { not /__Data__|^$/ } @dataRecord;

答案 2 :(得分:0)

好吧,如果你想要符合条件的元素:

@dataRecord = grep(/expr/,@dataRecord);

(假设数组中不需要的元素是不通过匹配正则表达式的元素)。