Arrays 排除另一数组中的列表元素

Arrays 排除另一数组中的列表元素,arrays,regex,perl,Arrays,Regex,Perl,我想创建一个这样的数组 @排除=[INFO]读取文件,[INFO]读取所有文件; 其中包含在循环另一个数组时希望忽略的项 另一个数组是@nyuulog,我已经从一个文件中准备好了它,看起来类似于: [INFO] Uploading 37 article(s) from 3 file(s) totalling 23.98 MiB``` [INFO] Reading file 157.1.1.par2... [INFO] Reading file 159.1.1.rar... [INFO] Read

我想创建一个这样的数组 @排除=[INFO]读取文件,[INFO]读取所有文件; 其中包含在循环另一个数组时希望忽略的项

另一个数组是@nyuulog,我已经从一个文件中准备好了它,看起来类似于:

[INFO] Uploading 37 article(s) from 3 file(s) totalling 23.98 MiB```
[INFO] Reading file 157.1.1.par2...
[INFO] Reading file 159.1.1.rar...
[INFO] Reading file 159.1.1.vol0+1.par2...
[INFO] All file(s) read...
[INFO] Finished uploading 23.98 MiB in 00:00:16.083 (1527.03 KiB/s). Raw upload: 2613.34 KiB/s
所以我用这个:

弗雷奇$line@nyuulog{打印$txtfile$line\n;}

它会写入所有行,但我不想将行写入包含@exclude数组中元素的filehandle

有没有一个简单的方法可以做到这一点?我曾多次尝试使用grep或新的Perl~~命令,但我认为它们不适用于这种情况,并且无法获得正确的命令组合

如果您能为我提供帮助或为我指明正确的方向,我们将不胜感激

谢谢

试试这个:

my $FilterRe = join("|", map({"(^\Q$_\E)"} @exclude));
my @Filtered = grep({!/$FilterRe/} @nyuulog);
灵感来源于。

试试这个:

my $FilterRe = join("|", map({"(^\Q$_\E)"} @exclude));
my @Filtered = grep({!/$FilterRe/} @nyuulog);

灵感来源于。

为要排除的内容构造一个查找哈希,并用它过滤数组

my %excl = map { $_ => 1 } @exclude;

my @filtered = grep { not $excl{$_} } @original; 
这大约和列表处理一样高效,而且希望是清晰和容易的

也可以将其放在do块中,以避免额外的变量%excl四处浮动

my @filtered = do { 
    my %excl = map { $_ => 1 } @exclude;
    grep { not $excl{$_} } @original;
};

为要排除的内容构造一个查找哈希,并用它过滤数组

my %excl = map { $_ => 1 } @exclude;

my @filtered = grep { not $excl{$_} } @original; 
这大约和列表处理一样高效,而且希望是清晰和容易的

也可以将其放在do块中,以避免额外的变量%excl四处浮动

my @filtered = do { 
    my %excl = map { $_ => 1 } @exclude;
    grep { not $excl{$_} } @original;
};

就这样-非常感谢你。我不知道代码在做什么,但我想要的最终结果是@Filtered,我会花一些时间来完成每一步来理解它。完成了-非常感谢。我不知道代码在做什么,但我想要的结果是@Filtered,我将花一些时间来完成每个步骤以理解它。下一步如果$line=~/\Q…。\E$/可能足以跳过任何进度类型的行。下一步如果$line=~/\Q…。\E$/可能足以跳过任何进度类型的行。