manpagez: man pages & more
man Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic(3)
Home | html | info | man
Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic(3)



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.




perl v5.28.2   Perl::Critic::Policy::BuiltinFunctions::ProhibitUselessTopic(3)

perl-critic 1.134.0 - Generated Mon Jun 3 07:19:37 CDT 2019
© manpagez.com 2000-2025
Individual documents may contain additional copyright information.