Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic(3pm) User Contributed Perl Documentation NAME Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic - Don't pass $_ to built-in functions that assume it, or to most filetest operators. AFFILIATION This Policy is part of the Perl::Critic distribution. DESCRIPTION There are a number of places where $_, or "the topic" variable, is unnecessary. Topic unnecessary for certain Perl built-in functions Many Perl built-in functions will operate on $_ if no argument is passed. For example, the "length" function will operate on $_ by default. This snippet: for ( @list ) { if ( length( $_ ) == 4 ) { ... is more idiomatically written as: for ( @list ) { if ( length == 4 ) { ... In the case of the "split" function, the second argument is the one that defaults to $_. This snippet: for ( @list ) { my @args = split /\t/, $_; is better written as: for ( @list ) { my @args = split /\t/; There is one built-in that this policy does not check for: "reverse" called with $_. The "reverse" function only operates on $_ if called in scalar context. Therefore: for ( @list ) { my $backwards = reverse $_; is better written as: for ( @list ) { my $backwards = reverse; However, the distinction for scalar vs. list context on "reverse" is not yet working. See KNOWN BUGS below. Topic unnecessary for most filetest operators Another place that $_ is unnecessary is with a filetest operator. # These are identical. my $size = -s $_; my $size = -s; # These are identical. if ( -r $_ ) { ... if ( -r ) { ... The exception is after the "-t" filetest operator, which instead of defaulting to $_ defaults to "STDIN". # These are NOT identical. if ( -t $_ ) { ... if ( -t ) { ... # Checks STDIN, not $_ KNOWN BUGS This policy flags a false positive on "reverse" called in list context, since "reverse" in list context does not assume $_. my $s = reverse( $_ ); # $_ is useless. my @a = reverse( $_ ); # $_ is not useless here. CONFIGURATION This Policy is not configurable except for the standard options. AUTHOR Andy Lester COPYRIGHT Copyright (c) 2013-2022 Andy Lester This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0. perl v5.38.0 2023-07-26 Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic(3pm)