This looks like you might be able to generate some sort of parallel comparision. If you wanted only lines where all rules matched it might even have been possible to use a combination of anding strings together and a regex match, used twice for non-negated and negated.

But since you want or, the fastest way I came up is to construct the comparision code into a string and eval that for each line. Sort of compiling the search pattern.

For example, if you have two rules that compare attr2 with 'n' and attr4 with '!x', then you could construct the following code string:

return 1 if ($a[2] eq 'n' or $a[4] neq 'x'); return 0;
Now just eval this for each line, having your lines split into @a first. If you need to know which rules matched, construct this instead:

my @return=(); if ($a[2] eq 'n') { push @return,2; } if ($a[2] neq 'x') { push @return,4; } return @return;

The only thing left is to eval your generated code for each line and check the return value of the eval


In reply to Re: Algorithm To Select Lines Based On Attributes by jethro
in thread Algorithm To Select Lines Based On Attributes by ~~David~~

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.