Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic - Don't pass $_ to built-in functions that assume it, or to most filetest operators. |
Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic - Don't pass $_ to built-in functions that assume it, or to most filetest operators.
This Policy is part of the Perl::Critic distribution.
There are a number of places where $_
, or ``the topic'' variable,
is unnecessary.
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.
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 $_
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.
This Policy is not configurable except for the standard options.
Andy Lester <andy@petdance.com>
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.
Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic - Don't pass $_ to built-in functions that assume it, or to most filetest operators. |