Author: larry
Date: Thu Feb  1 13:33:59 2007
New Revision: 13560

Modified:
   doc/trunk/design/syn/S03.pod
   doc/trunk/design/syn/S12.pod

Log:
Killed filetest operators!  (They were a pain to parse anyway.)
A Pair pattern now queries back to object to ask if it thinks it matches.
Str and IO use .TEST to implement filetests.
Stat buffer caching is now automatic, up to a point.


Modified: doc/trunk/design/syn/S03.pod
==============================================================================
--- doc/trunk/design/syn/S03.pod        (original)
+++ doc/trunk/design/syn/S03.pod        Thu Feb  1 13:33:59 2007
@@ -14,7 +14,7 @@
   Date: 8 Mar 2004
   Last Modified: 1 Feb 2007
   Number: 3
-  Version: 94
+  Version: 95
 
 =head1 Overview
 
@@ -37,7 +37,7 @@
     Additive            + - ~ +| +^ ~| ~^ ?| ?^
     Junctive and (all)  &
     Junctive or (any)   | ^
-    Named unary         rand sleep abs -e -r -w -x
+    Named unary         rand sleep abs
     Nonchaining binary  but does <=> leg cmp .. ..^ ^.. ^..^ ff fff
     Chaining binary     != == < <= > >= eq ne lt le gt ge ~~ === eqv !eqv
     Tight and           &&
@@ -670,12 +670,6 @@
 
 =item *
 
-File test operators
-
-    -e -r -w -x etc.
-
-=item *
-
 The C<item> contextualizer
 
     item
@@ -1414,19 +1408,27 @@
 
 =item *
 
-The filetest operators now return a result that is both a
-boolean (or in the case of C<-s>, a number) and a stat buffer, so
-there is no longer any need for PerlĀ 5's C<_> term.  Instead just
-cascade tests to "and" them:
-
-    if -r -w -x $filename {...}
-
-Or put the value in a variable to do anything fancier:
-
-    $sb = -e $filename;
-    if -r $sb {...}
-    if -w $sb {...}
-    if -x $sb {...}
+The filetest operators now gone.  We now use a Pair as a pattern to
+get the same effect:
+
+    if $filename ~~ :e { say "exists" }
+
+These tests may be combined via junctions:
+
+    given $handle {
+        when all :r :w :x {...}
+        when :w | :x      {...}
+        when *            {...}
+    }
+
+In general, the user need not worry about caching the stat buffer.
+The stat buffer will automatically be reused if the same object is
+queried and the stat buffer has not "expired", where that is defined
+as older than a second or so.  If this is a concern, an explicit stat()
+or lstat() will automatically reset the stat buffer, as will switching
+to a different filename or handle.
+
+Note that C<$file ~~ :s> still returns the filesize.
 
 =item *
 
@@ -1438,8 +1440,8 @@
 The postfix interpretation of an operator may be overridden by
 use of a quoted method call, which calls the prefix form instead.
 So C<x().!> is always the postfix operator, but C<x().'!'> will always
-call C<!x()>.  In particular, you can say things like C<$array.'@'> and
-C<$filename.'-e'.'-r'>.  You may even say things like C<$fh.'='>, which
+call C<!x()>.  In particular, you can say things like C<$array.'@'>.
+and C<$fh.'='>, which
 because of the quotes will not be confused lexically with C<$fh.=new>.
 
 =item *
@@ -2125,6 +2127,8 @@
     Any       Num       numeric equality        +$_ == X
     Any       Str       string equality         ~$_ eq X
 
+    Any       Pair      test object             .TEST(X) (Str,IO do filetest)
+
     Set       Set       identical sets          $_ === X
     Hash      Set       hash keys same set      $_.keys === X
     Any       Set       force set comparison    Set($_) === X

Modified: doc/trunk/design/syn/S12.pod
==============================================================================
--- doc/trunk/design/syn/S12.pod        (original)
+++ doc/trunk/design/syn/S12.pod        Thu Feb  1 13:33:59 2007
@@ -12,9 +12,9 @@
 
   Maintainer: Larry Wall <[EMAIL PROTECTED]>
   Date: 27 Oct 2004
-  Last Modified: 28 Dec 2006
+  Last Modified: 1 Feb 2007
   Number: 12
-  Version: 35
+  Version: 36
 
 =head1 Overview
 
@@ -231,8 +231,8 @@
 The latter is especially useful for postfix forms that might be confusing
 to the lexer or to the human reader:
 
-    $filename.'-e'      # same as -e $filename.
-    .'-e'               # same as -e $_
+    $filename.'+'      # same as +$filename.
+    .'+'               # same as +$_
 
 And in fact, if there is a choice between a unary prefix and a postfix
 operator, the indirect forms will choose the prefix operator.  See S03.

Reply via email to