http://www.perlmonks.org?node_id=578911

davidj has asked for the wisdom of the Perl Monks concerning the following question:

Fellow monks,
I have been scratching my head over this trying to figure out what I am doing wrong. For the life of me, I am not seeing it. I am using grep to test the value of a query paramater. The value IS in the list, but grep is not finding it. I hope I have included all the relevant information below.

The form part looks like this:
<select name="report_type" > <option value="case_id">case_id</option> <option value="hosp_alias">hosp_alias</option> <option selected="selected" value="sender">sender</option> <option value="receiver">receiver</option> <option value="date">date</option> </select>
After selecting any of the option (in this case sender), I do the following in the cgi script:
print "param=" . $q->param('report_type') . "<BR>"; if( grep { /$q->param('report_type')/ } (qw/case_id hosp_alias sender +receiver/) ) { print "we are getting the list<BR>"; } else { print "we are NOT getting the list<BR>"; }
The output I get is this:
param=sender we are NOT getting the list
At this point I am not modifying in any way the query parameters after they are sent to the script.
If I understand grep correctly, I should be getting:
param=sender we are getting the list
If I take this part and put it in a simple script, I works correctly:
#!/usr/bin/perl $p = 'sender'; if( grep { /$p/ } (qw/case_id hosp_alias sender receiver/) ) { print "getting the list\n"; } else { print "not getting the list\n"; }
output:
getting the list
Why am I not getting what is expected? The value is verifiably in the list. The grep syntax is correct.

As always your assistance is much appreciated.
davidj