http://www.perlmonks.org?node_id=1003572


in reply to Re: Split output by tabs
in thread Split output by tabs

Perl Best Practices #136: Always put filehandles in braces within any print statement. It is easier to read, helps you not to write a comma, and you do not have to remember when to use braces and when not.
لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

Replies are listed 'Best First'.
Re^3: Split output by tabs
by shmem (Chancellor) on Nov 13, 2012 at 09:34 UTC
    Perl Best Practices #136: Always put filehandles in braces within any print statement. It is easier to read, helps you not to write a comma, and you do not have to remember when to use braces and when not.

    Excellent example of a bogus "best practice", thank you: it is always better to know when to use curlies, and when not.

      I disagree as to the bogosity of this practice. There is nothing wrong with adding clarity to a statement that may otherwise be confusing or ambiguous. And there is nothing wrong with reducing the number of rules someone needs to know in order to correctly decipher a statement.

      This is just such a case, because an argument given to print can start with either a filehandle or a variable. Depending on what follows, it can be very hard to tell which is intended without braces.

      I do enjoy how Perl lets one push the boundaries of acceptable syntax, but that doesn't mean it's always a good idea to do so. That's just my opinion, of course.



      When's the last time you used duct tape on a duct? --Larry Wall

        There is nothing wrong with adding clarity to a statement that may otherwise be confusing or ambiguous. And there is nothing wrong with reducing the number of rules someone needs to know in order to correctly decipher a statement.

        How does it add clarity or reduce the number or rules?

        perldoc -f print starts with

        print FILEHANDLE LIST
        print FILEHANDLE
        print LIST

        print { EXPR } LIST is not on the list at all

        Where is the ambiguity?

        print $fh map { "$_\n" } @list; print {$fh} map { "$_\n" } @list; $fh->print( map { "$_\n" } @list ); print( $fh map { "$_\n" } @list ); print( {$fh} map { "$_\n" } @list ); print $fh @list; print {$fh} @list; $fh->print( @list ); print( $fh @list ); print( {$fh} @list );

        This is just such a case, because an argument given to print can start with either a filehandle or a variable. Depending on what follows, it can be very hard to tell which is intended without braces.

        They're both called filehandles, both STDOUT and $fh, the first argument to print is always an optional filehandle followed by a LIST

        STDOUT is a bareword filehandle and $fh is a lexical-scalar filehandle