in reply to grep not working as expected

This isn't doing what you think:
grep { /$q->param('report_type')/ } (qw/case_id hosp_alias sender rece +iver/)
Regular expressions are interpolated, but not evaluated.

What you want instead is:

grep { $q->param('report_type') eq $_ } (qw/case_id hosp_alias sender +receiver/)
Or:
my $report_type = $q->param('report_type'); grep { $report_type eq $_ } (qw/case_id hosp_alias sender receiver/)
And to avoid checking a long list you can get only the first match by using List::Util as follows:
use List::Util qw( first ); if ( first { $report_type eq $_ } (qw/case_id hosp_alias sender receiv +er/)) { }