<?xml version="1.0" encoding="windows-1252"?>
<node id="44757" title="Re: How can grep search based on text or pattern based on user input?" created="2000-12-04 06:44:47" updated="2005-07-19 14:08:39">
<type id="11">
note</type>
<author id="13201">
dchetlin</author>
<data>
<field name="doctext">
`grep' in Perl is a misnomer; it's not inherently related to
RExen. It should really be named `filter' or something
similar. As such, using a bare variable as the `EXPR' in
&lt;code&gt;grep EXPR, LIST&lt;/code&gt; won't invoke the REx engine at
all -- basically you're checking &lt;code&gt;$searchtext&lt;/code&gt;
for truth each time through the `LIST', which is most
certainly not WYM.

&lt;p&gt;My personal vote on this problem would be to provide the
users a radio button group allowing them to choose whether
they want to use Perl-based or standard search-engine
searches, rather than trying to come up with a heuristic to
determine if &lt;code&gt;$searchtext&lt;/code&gt; is a Perl REx or just
a term.

&lt;p&gt;However, if you really want to do that, you'll want to
look into `\Q' and `\E' to quote characters in a REx, rather
than going to all that trouble (on line 4) to take care
of metacharacters. I'm skeptical of the conversion from `*'
to `\w*', but I suppose it's a sensible choice.

&lt;p&gt;Rather than trying to build up a string that syntactically
resembles a REx in Perl code, build the actual search pattern
and then use it in the grep inside of a REx:

&lt;p&gt;&lt;code&gt;grep m/$searchtext/, &lt;STUFF&gt;&lt;/code&gt;

&lt;p&gt;You might also want to look into qr// for a more efficient
and cleaner way to build RExen programatically.

&lt;p&gt;-dlc</field>
<field name="root_node">
44553</field>
<field name="parent_node">
44553</field>
</data>
</node>
