http://qs321.pair.com?node_id=745911


in reply to (Mis)Understanding grep...eq $_

grep EXPR, LIST executes EXPR for each item in LIST (with $_ set to that item), and returns a list of those items from LIST for which the EXPR is true. Or in scalar context, as provided by your unless(), it returns a count of the items for which EXPR was true. So your grep $person_has eq $_, $item returns 1 when $person_has eq $item and 0 otherwise, and the whole unless () is equivalent to if ($person_has ne $item). So you may shoot whoever wrote the code.

Your "search through the string", "includes an exact match", make it sound like you are expecting some kind of string matching operator, while grep is really a list filter (though the arbitrary filtering expression may sometimes be a match operation). Try rereading grep with that in mind.