Andy Lester > Perl-Critic > Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic

Download:
Perl-Critic-1.121_01.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 1.121_01   Source  

filetest

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, it is difficult for Perl::Critic to determine scalar vs. list context, so I have decided to leave reverse unchecked rather than giving false positives.

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.

syntax highlighting: