Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

davorg (18)

davorg
  dave@dave.org.uk
http://dave.org.uk/
Yahoo! ID: daveorguk (Add User, Send Message)

Hacker, author, trainer

Technorati Profile [technorati.com]

Journal of davorg (18)

Wednesday April 14, 2004
05:41 AM

Extreme Perl

[ #18330 ]

I haven't read it all yet, but this looks interesting.

It's public draft of a book on XP in Perl written by Robert Nagler.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • I certainly don't agree with replacing "if else" with "? :". You throw your readability out the window, IMO. But I guess that is what makes it "extreme".
    • Each has it's use in it's place. Use "? :" when you need to return a value in a statement inline. E.g.,
      my $x = $test ? $y : $z;
      # is better (disclaimer - IMHO) than:
      my $x;
      if ($test) {
        $x = $y;
      } else {
        $x = $z;
      }
      All of the examples of "? :" in that document (that I can see) are similar to this, so they're ok. Using "? :" in a void context is arguably not so good.
      • my $x = $test ? $y : $z;

        I can understand doing the above becuase visually you can isolate that line and grok it quickly. When you use it in a larger "else if" context you loose that visual recognition.

        • How about:

            my $foo =   ( $bar =~ /pattern/ )
                      ? ( some expression )
                      : ( some other expression );
          • I do something very similar to this in my code on a regular basis - What I normally do is shift the ternary operators back onto the leading line so that it is immediately apparent that the line has not ended. For example:

            my $foo = ( $bar =~ /pattern/ ) ?
                      ( some expression ) :
                      ( some other expression );

            This of course is more of a question of style than anything else, and I know that I am somewhat obtuse and anal at times with regard to my

        • Like this?

              my $mode = (ref $hash->{CALLBACK} eq 'CODE'
                  ? kAEQueueReply
                  : (exists $hash->{REPLY}    # check event setting
                      ? $hash->{REPLY}
                      : exists $self->{REPLY}    # check global setting
                          ? $self->{REPLY}
                          : 1 

      • Then try this. (;-))
        my $x = do {
            if ($test) {
                $y;
            } else {
                $z;
            }
        };