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 <andy@petdance.com>
COPYRIGHT¶
Copyright (c) 2013 Andy Lester <andy@petdance.com>
This library is free software; you can redistribute it and/or modify it under
the terms of the Artistic License 2.0.