Regex 如何仅返回与数组的任何值都不匹配的行?

Regex 如何仅返回与数组的任何值都不匹配的行?,regex,perl,Regex,Perl,我试图将CSV文件中的每一行与使用Perl存储在数组中的每个元素(字符串)进行比较。仅当CSV文件中的行未与数组中的任何字符串匹配时,我才希望返回/打印到文件中。我已经尝试了许多种循环来实现这一点,但不仅没有找到解决方案,而且我的尝试都没有真正给我关于我哪里出错的线索。下面是我尝试过的几个循环示例: while (<CSVFILE>) { foreach $i (@lines) { print OUTPUTFILE $_ if $_ !~ m/$i/;

我试图将CSV文件中的每一行与使用Perl存储在数组中的每个元素(字符串)进行比较。仅当CSV文件中的行未与数组中的任何字符串匹配时,我才希望返回/打印到文件中。我已经尝试了许多种循环来实现这一点,但不仅没有找到解决方案,而且我的尝试都没有真正给我关于我哪里出错的线索。下面是我尝试过的几个循环示例:

while (<CSVFILE>) {
   foreach $i (@lines) {
        print OUTPUTFILE $_ if $_ !~ m/$i/;
     }; #foreach
}; #while
和数组元素(带有正则表达式转义字符):

假设仅将上述内容作为输入数据,我希望能够得到:

1,c.03_05delAAG,null,71...
3,c.87C>T,null,16C->T....

因为它们不包含数组中的任何元素。这是散列发挥作用的情况吗?除了标准的“字典”定义外,我对它们还没有很好的理解。如果有人能帮我解决这个问题,我将不胜感激。A关于这一点,我可能只是手工操作,因为没有那么多,我需要尽快解决这个问题,但由于我无法在其他任何地方搜索到任何答案,我认为这是值得一问的。

使用Perl 5.10.1或更高版本,因此您可以应用。 另外,在处理两个循环时,不要使用隐式的
$\uu
,它太容易混淆并且容易出错

以下代码(未经测试)可能会起作用:

use 5.010;
use strict;
use warnings;
use autodie;

...

my @regexes = map { qr{$_} } @lines;

open my $out, '>', $outputfile;
open my $csv, '<', $csvfile;

while (my $line = <$csv>) {
    print $out $line unless $line ~~ @regexes;
}

close $csv;
close $out;
使用5.010;
严格使用;
使用警告;
使用自动模具;
...
my@regexes=map{qr{$}}@line;
打开我的$out,'>',$outputfile;

打开我的$csv,'我有严格和警告设置,但我在运行脚本时工作正常,但要么输出一个空白csv,要么只是重新打印原始文件。我遗漏了一些非常明显的东西吗?“你的代码不起作用的原因……”哇,好吧!我想这是我错过的最明显的东西。嗯,我显然有一些阅读/更新工作要做。一旦我把一切都整理好,我会在这里发布它是否有效/什么有效。谢谢你的热情回应。尽管Perl有时会令人沮丧,但社区是巨大的。谢谢
c\.12T\>G
c\.97A\>C
1,c.03_05delAAG,null,71...
3,c.87C>T,null,16C->T....
use 5.010;
use strict;
use warnings;
use autodie;

...

my @regexes = map { qr{$_} } @lines;

open my $out, '>', $outputfile;
open my $csv, '<', $csvfile;

while (my $line = <$csv>) {
    print $out $line unless $line ~~ @regexes;
}

close $csv;
close $out;