Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: [OT]: Re^9: What's the right way to write a method which returns one line at a time from a file?

by eyepopslikeamosquito (Bishop)
on Nov 26, 2020 at 09:52 UTC ( #11124253=note: print w/replies, xml ) Need Help??


in reply to [OT]: Re^9: What's the right way to write a method which returns one line at a time from a file?
in thread What's the right way to write a method which returns one line at a time from a file?

Yes, I agree. I especially like that there is only one return statement. In contrast, using multiple return statements violates the principle of DRY.

Related items from Conway's Perl Best Practices, Chapter 6 (Control Structures):

  • Avoid cascading an if
  • Use table look-up in preference to cascaded equality tests
  • When producing a value, use tabular ternaries

Conway recommends formatting tabular ternaries with the colon at the front, for example:

# When their name is... Address them as... my $salute = $name eq $EMPTY_STR ? 'Customer' : $name =~ m/(.*), \s+ Ph[.]?D \z /xms ? "Dr $1" : $name ;
because, if you squint, it looks like a lookup table, thus converting the notoriously impenetrable ternary syntax into a familiar and easy to understand lookup table.

Update: Fixed typo in Conway's example my $salute statement above (removed extra ?). Thanks AnomalousMonk.

  • Comment on Re: [OT]: Re^9: What's the right way to write a method which returns one line at a time from a file?
  • Select or Download Code

Replies are listed 'Best First'.
Re^2: [OT]: Re^9: What's the right way to write a method which returns one line at a time from a file?
by AnomalousMonk (Bishop) on Nov 26, 2020 at 10:07 UTC
    # When their name is... Address them as... my $salute = $name eq $EMPTY_STR ? 'Customer' : $name =~ m/(.*), \s+ Ph[.]?D \z /xms ? "Dr $1" : ? $name ;

    One ? too many:

    Win8 Strawberry 5.8.9.5 (32) Thu 11/26/2020 5:03:36 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings -l my $name = 'xyzzy'; my $salute = $name eq 'foo' ? 'Fooble' : $name eq 'bar' ? 'Barfly' : $name ; print $salute; ^Z xyzzy


    Give a man a fish:  <%-{-{-{-<

      Yes, I've corrected the offending node. Thanks.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://11124253]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (6)
As of 2021-04-13 13:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?