http://qs321.pair.com?node_id=1109420

TomDLux has asked for the wisdom of the Perl Monks concerning the following question:

I'm using perltidy and would like to use Damian's PBP recommended layout for ternary operators:

my $var = ($condition ? $val_for_true : $val_for_false );

Yes, I like to parenthesize them. How can I get perltidy to generate that layout? I've tried a number of things, including '-pbp', but no such luck. What I get is:

my $var = ( $condition ? $val_for_true : val_for_false );

As Occam said: Entia non sunt multiplicanda praeter necessitatem.

Replies are listed 'Best First'.
Re: perltidy for ternary operator?
by LanX (Saint) on Dec 06, 2014 at 18:44 UTC
    I looked into PBP and that's not what it says!

    It recommends to

    Format cascaded ternary operators in columns
    and that's exactly what the -pbp switch does:

    lanx@lanx-1005HA:~$ cat /tmp/tst.pl my $var1 = $condition ? $val_for_true : $val_for_none ; my $var2 = $condition ? $val_for_true : $condition2 ? $val_for_ +true2 : $val_for_none ; lanx@lanx-1005HA:~$ perltidy -pbp /tmp/tst.pl my $var1 = $condition ? $val_for_true : $val_for_none; my $var2 = $condition ? $val_for_true : $condition2 ? $val_for_true2 : $val_for_none;

    I'd appreciate if you'd fix the typo in the title, provide links to documentation of the modules (like perltidy) and chapters (like "Ternaries") you are questioning.

    Cheers Rolf

    (addicted to the Perl Programming Language and ☆☆☆☆ :)

      Page 32 of PBP, first edition : </p

      You can use the tabular layout even if you have only a singular ternary .... Starting out this way makes it easier for maintainers to subsequently add new alternatives to the table.
      

      As Occam said: Entia non sunt multiplicanda praeter necessitatem.

        That's a suggestion ("you can") for the case you expect new entries to come.

        But that's not a problem with perltidy, cause cascades (as demonstrated) would be fixed automatically.

        And I doubt that breaking simple ternaries would be appreciated by the majority.

        It might interest you that tidy's output of a simple ternaries depends on existing linebreaks: (see -bot option)¹

        lanx@lanx-1005HA:~$ cat /tmp/tst.pl my $var1 = $condition ? $val_for_true : $val_for_none ; #own linebreak my $var2 = $condition ? $val_for_true : $val_for_none ; lanx@lanx-1005HA:~$ perltidy -pbp /tmp/tst.pl my $var1 = $condition ? $val_for_true : $val_for_none; #own linebreak my $var2 = $condition ? $val_for_true : $val_for_none;

        Since the documentation mentions ternaries only once for -bot I doubt your goal can be achieved! (i.e. without patching the code)

        Cheers Rolf

        (addicted to the Perl Programming Language and ☆☆☆☆ :)

        update

        ¹) i.a.W if you expect the ternary to be cascaded in the future then enter a linebreak manually.