On Thu, Apr 21, 2005 at 06:40:54PM +0200, Juerd wrote:
: Larry Wall skribis 2005-04-21 8:54 (-0700):
: > if $filename ~~ -r & -w & -x {...}
:
: Just curious - would the following dwym?
:
: if (&prefix:<-r> & &prefix:<-w> & &prefix:<-x>)($filename) { ... }
It might do what you mean. Personally, I would never mean that if I
could help it. :-)
: > It seems to me that -e �$_� would handle most of these cases, as long as
: > whitespace always comes in quoted so that you always end up with one word.
: > That seems more general than a special option to -X ops.
:
: Wouldn't it be a good option to combine the filetest operators into one
: operator? It'd even be historically correct to call that test:
:
: test(:r & :w, $fn);
Hmm. I think this works syntactically:
$file ~~ all(:r:w)
: I still like -r -w $fn much better than the binding and the ~~ things.
There's one minor problem with -r -w $file, which is that it evaluates
right-to-left, which is going to surprise some people who think they
want to say
-e -r $file
when they really mean
-r -e $file
But that doesn't really matter much unless you're so much into speed
that you think about falsifying the test without doing a stat().
Now the interesting thing about the ~~ approach is that it naturally
lends itself to
given $file {
when :x {...}
when :r:w {...}
when :r(0) {...}
when :u | :g {...}
default:
}
I suppose it's a little bit rude to grab all the pairs for testing
against all the strings, so maybe we have to say
given $file.test {...}
$file.test ~~ :r&:w
or maybe
given $file.stat {...}
$file.stat ~~ :r&:w
which leaves room for lstat if we need it, though I can't say I'm fond
of the Unix naming scheme here. If we borrow from IO::All maybe it's just:
given io($file) {...}
io($file) ~~ :r&:w
BTW, I'm assuming the $file is either $filename or $filehandle there.
Larry