in reply to and this or that

Usually if I want to do something like this, I use both the low-precedence and high-precedence operators, to explicitly and obviously indicate what is happening, as follows:
opendir(PWD,"$next") && my @files = readdir PWD or die "Open \"$_\" failed: $!";
A side note: As a matter of good form, I don't declare lexically scoped variables within subexpressions, and especially not within conditionally executed ones, like you did with @files. In this specific example, I would not combine the readdir and openddir in one line.

Your second example I would seperate into two statements as jeroenes suggested above, but you can also do

s/test/whatever/, print;
if you're really itching to put it all on one line. Or, if you prefer:
s/test/whatever/ => print;
   MeowChow                                               
                print $/='"',(`$^X\144oc $^X\146aq1`)[-2]

Replies are listed 'Best First'.
Re: Re: and this or that
by dws (Chancellor) on Feb 06, 2001 at 01:41 UTC
    Aside from the minor problem of using $_ where you mean to use $next, there are two problems with
    opendir(PWD,"$next") && my @files = readdir PWD or die "Open \"$_\" failed: $!";

    First, you waste future readers' time. The few seconds you've saved by writing the above rather than

    opendir(PWD,$name) or die "$name: $!"; my @files = readdir(PWD) or die "$name: $!";
    Have just eclipsed by N x "what's this? uh.. oh, I see". Better, in my humble opinion, to write straightforward code. Sure, you have code "or die" twice, but in the scheme of things, that's a really minor nit.

    Second, in the unikely event that opendir() succeeds and readdir() fails, you're presenting a misleading diagnostic.

      Which is exactly why I said:

      "In this specific example, I would not combine the readdir and openddir in one line. "

      I was re-cycling his example code simply to make another point about operator precedence.

        Mea culpa. I misread you.