Hi Ovid,

* Ovid <[EMAIL PROTECTED]> [2007-04-16 12:45]:
> 1. The server I tested this on had one entry in the PATH which
> didn't exist on the server, so I first check to see if stat($_)
> returns a true value.

But you do it with a double stat, hmm.

> 2. There was a precedence problem.  The not (!) binds tighter
> than the bitwise and (&), so parentheses were needed.

Oh yeah. I wrote this with only a single grep doing both the
absolute check and the mode check at first, then decided to pull
them apart for readability. Generally I prefer the low-precedence
set of boolean ops so I don’t have good instincts for composition
with the other set. I should have stuck with `not`… oh, and
*tested* the code after rewriting it.

    use Config;
    use File::Spec::Functions;
    use File::stat;
    use Fcntl qw( :mode );

    $ENV{PATH} = do {
        my $sep = $Config{path_sep};

        join $sep, (
            map  { /(.*)/ }
            grep { my $s = stat($_); $s and not $s->mode & S_IWOTH }
            grep { file_name_is_absolute($_) }
            split( /\Q$sep/, $ENV{PATH} ),
        );
    };

(And this time it’s tested.)

-- 
*AUTOLOAD=*_;sub _{s/(.*)::(.*)/print$2,(",$\/"," ")[defined wantarray]/e;$1}
&Just->another->Perl->hack;
#Aristotle

Reply via email to