in reply to Expression form of map or grep

Most of the default Perl::Critic policies come from TheDamian's Perl Best Practices. The rationale for the policies can be found in perlcritic's verbose output, the POD (in this case, Perl::Critic::Policy::BuiltinFunctions::RequireBlockMap), and of course the book (page 169).

$ perlcritic Expression form of "map" at line 8, column 12. See page 169 of PBP. +(Severity: 4) $ perlcritic --verbose 11 Expression form of "map" at line 8, near 'my @list = map "$_ beads", @ +colors, @grey_scale;'. BuiltinFunctions::RequireBlockMap (Severity: 4) The expression forms of `grep' and `map' are awkward and hard to r +ead. Use the block forms instead. @matches = grep /pattern/, @list; #not ok @matches = grep { /pattern/ } @list; #ok @mapped = map transform($_), @list; #not ok @mapped = map { transform($_) } @list; #ok

Although Perl::Critic policies usually have a very good reason, some of them can be seen as stylistic choices and one can disagree with PBP if one knows what one is doing. The severify of policies can be changed via the config file, e.g.:

$ cat ~/.perlcriticrc severity = 3 [BuiltinFunctions::RequireBlockMap] severity = 2