This exact problem is actually covered in the panther book as an eval() example. The code is basically like yours, but the if() statement is built with a join() command:
@patterns = qw(cat dog); $code = 'if (/'; $code .= join('/ && /', @patterns); $code .= '/) { print "Found a DOG and a CAT!\n\n"; }'; eval $code; die "Error: $@" if ($@);
Here's another solution which probably has no practical application, but looks cool anyway:
#!/usr/bin/perl use strict; my (@str, @search, %words, @matched_words); # Token string @str = qw(cat dog rat elephant giraffe); # List of search keys to check for @search = qw(cat dog); # Create a hash keyed with the token list. # E.g. $words{elephant} = 1; $words{rat} = 1; etc @words{@str} = (1) x @str; # Create an array with the same number of elements # as the number of search keys that were present in # the original string. @matched_words = @words{@search}; # Check to see if the number of matched words # is equal to the number of words we were searching # for if (scalar @search == scalar @matched_words) { print "Found a DOG and a CAT!\n\n"; }
It's case-sensitive and doesn't do regular expressions, but I imagine it's pretty fast.

-Matt


In reply to Re: How to generate Perl statements on the fly and execute them when they are synthesized. by DrManhattan
in thread How to generate Perl statements on the fly and execute them when they are synthesized. by kleinbiker7

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.