Author: wayland
Date: 2009-02-23 04:47:22 +0100 (Mon, 23 Feb 2009)
New Revision: 25490

Added:
   docs/Perl6/Spec/S28-special-variables.pod
Log:
Created the draft spec here.  It's very drafty, but no more than some.  

Also added the $*DEFIN, etc, as per S16.  


Added: docs/Perl6/Spec/S28-special-variables.pod
===================================================================
--- docs/Perl6/Spec/S28-special-variables.pod                           (rev 0)
+++ docs/Perl6/Spec/S28-special-variables.pod   2009-02-23 03:47:22 UTC (rev 
25490)
@@ -0,0 +1,740 @@
+=head1 NAME
+
+ [DRAFT] Synopsis 28 - Special Variables [DRAFT]
+
+=head1 Version
+
+ Author:        Larry Wall <la...@wall.org>
+ Maintainer:    Larry Wall <la...@wall.org>
+ Contributions: Tim Nelson <wayl...@wayland.id.au>
+ Date:          23 Feb 2009, created from miscellaneous documents lying around
+ Last Modified: 23 Feb 2009
+ Version:       1
+
+=head1 INTRODUCTION
+
+This document serves as a collection point 
+for what is known about special variables 
+in Perl 6 and correlates them with the changes from Perl 5. 
+
+If you are trying to find the Perl 6 equivalent of a Perl 5 special
+variable you know, try searching this file for the Perl 5 version.
+Each main entry is followed by a note containing the corresponding
+Perl 5 variable(s). The list of main entries is also followed by 
+a table showing the 5 and 6 variables side-by-side.
+
+Most/All variables of the form $*SOMETHING should also work in the form
+$SOMETHING (without the '*') unless masked by "my $SOMETHING".
+
+=head1 DESCRIPTION
+
+=head2 Secondary Sigils (also known as "twigils"):
+
+    $+   # currently compiling scope (see S02)
+    $?   # lexically-scoped (compile time, see S02)
+    $*   # global (run time, see S02)
+    $=   # file-scoped (see S02)
+    $^   # implicit block argument (see S06 placeholder variables)
+    $<   # current $/ scope (see S02)
+    $.   # public attribute (see S12 attributes)
+    $!   # private attribute (see S12 attributes)
+
+
+=head2 Named variables (see S02):
+
+    $/             # match object from last rule
+    $0             # first captured value from match: $/.[0]
+    @*ARGS         # command-line arguments
+    &?BLOCK        # current block (itself, see S06)
+    @?BLOCK        # current blocks (themselves, see S06)
+    $?BLOCKLABEL   # label of current block (see S06) 
+                   #   XXX redundant with $?LABEL?
+    ::?CLASS       # current class (as package name)
+    $?CLASS        # current class (as variable)
+    @?CLASS        # current classes
+    %?CONFIG      # configuration hash
+    $=DATA         # data block handle (=begin DATA ... =end)
+    $*DEFIN        # Default input file handle (see S16)
+    $*DEFOUT       # Default output file handle (see S16)
+    $*DEFERR       # Default error file handle (see S16)
+    $*EGID         # effective group id
+    %*ENV          # system environment
+    $*ERR          # standard error handle (but you likely want $*DEFERR)
+    $*EUID         # effective user id
+    $*EXECUTABLE_NAME    # executable name
+    $?FILE         # current file
+    $?GRAMMAR      # current grammar
+    @?GRAMMAR      # current grammars
+    $*GID          # group id
+    $*IN           # standard input handle (but you likely want $*DEFIN)
+    $?LABEL        # label of current block
+    @?LABEL        # labels of current blocks
+    $?LINE         # current line
+    $?MODULE       # current module
+    @?MODULE       # current modules
+    $?OS           # operating system compiled for
+    $*OS           # operating system running under
+    $?OSVER        # operating system version compiled for
+    $*OSVER        # operating system version running under
+    $*OUT          # standard output handle (but you likely want $*DEFOUT)
+    $?PACKAGE      # current package (as object)
+    @?PACKAGE      # current packages
+    $?PACKAGENAME  # name of current package (see S10) 
+    $?PERLVER      # perl version compiled for
+    $*PERLVER      # perl version running under
+    $*PROGRAM_NAME # name of the program being executed
+    $*PID          # system process id
+    $?PUGS_VERSION # Pugs version (not canonical)
+    $*PUGS_HAS_HSPLUGINS # True if Pugs was compiled with support for hsplugins
+                         # (not canonical)
+    ::?ROLE        # current role (as package name)
+    $?ROLE         # current role (as variable)
+    @?ROLE         # current roles
+    &?ROUTINE      # current sub or method (itself, see S06)
+    @?ROUTINE      # current subs or methods (themselves)
+    $*UID          # system user id
+
+There were threads on p6l about unifying all variables which concern the OS or
+the VM ($*UID, $*PROGRAM_NAME, etc.) into two variables, $?ENV (compile-time
+environment) and $*ENV (runtime environment). Larry did like the idea, but
+"ENV" is probably to overloaded to mean the hash of environment variables
+(which would be found under $*ENV.environment or some-such).
+
+
+XXX Everything below this line is older than everything above it.  XXX
+
+=head1 NAME
+
+ [DRAFT] Synopsis 28 - Special Variables [DRAFT]
+
+=head1 OUTLINE
+
+ DRAFT NOTES
+ INTRODUCTION
+ SPECIAL VARIABLES
+ PERL 6 / PERL 5 COMPARISON
+ HISTORY
+ SOURCES
+
+=head1 DRAFT NOTES
+
+As of 2007-03-13:
+
+There is a more recent document at docs/Perl6/Overview/Variable.pod
+which contains the bare bones of the next
+iteration of work on special variables in Perl 6.
+
+While the list there appears to be more complete, there remains information
+here that may still be of help in roughing in more details there.
+
+=head1 SPECIAL VARIABLES
+
+=over 8
+
+=item $*IN
+
+=item $*OUT
+
+=item $*ERR
+
+Predefined filehandles for STDIN, STDOUT, and STDERR.
+
+=over 4
+
+=item p5:
+
+Replace STDIN, STDOUT, and STDERR.
+
+=back
+
+=back
+
+=over 8
+
+=item $_
+
+The default input and pattern-searching space. 
+Same as in Perl 5 but lexically scoped
+
+=over 4
+ 
+=item p5:
+
+$_ but more lexically aware.
+
+=back
+
+=back
+
+=over 8
+
+=item $a, $b, $c ...
+
+Parameters of the current closure (block 
+or subroutine) by position in the invocation.
+
+=over 4
+ 
+=item p5:
+
+$_[0], $_[1], $_[2] ...
+
+=back
+
+=back
+
+=over 8
+
+=item $/
+
+Object containing the results of the last regular expression match. 
+All match result info found in the contained data structure. 
+This is available as the current state of the match in progress.
+
+=over 4 
+
+=item p5:
+
+No direct parallel.
+
+=back
+
+=back
+
+=over 8
+
+=item $0,$1,$2...
+
+Objects containing information on any subpatterns 
+from the corresponding set of capturing 
+parentheses from the last pattern match, not counting patterns 
+matched in nested blocks that have been exited already.
+These variables are all read-only and dynamically scoped to the 
+current BLOCK. Shortcut to same info in $/ with data structures containing 
+such things as .start and .end (Unicode level independent).
+
+=over 4 
+
+=item p5:
+
+$1,$2,$3... but now as objects, and base zero instead of one.
+
+=back
+
+=back
+
+=over 8
+
+=item $0
+
+$0 (dollar-zero) is the string matched by the last successful 
+pattern match (not counting any matches hidden within a BLOCK 
+or eval() enclosed by the current BLOCK). 
+This variable is read-only and dynamically scoped to the current BLOCK.
+What would be returned by $1 if you had
+put parens around the entire match. $0 is not bound until 
+the match succeeds. 
+
+=over 4 
+
+=item p5:
+
+$&, $MATCH
+
+=back
+
+=back
+
+=over 8
+
+=item $*MOST_RECENT_CAPTURED_MATCH
+=item $/[-1]
+=item $/[-$n]
+
+It's not clear yet which of these would be used.
+Or whether to drop this.
+
+=over 4 
+
+=item p5:
+
+$^N
+
+=back
+
+=back
+
+=over 8
+
+=item $.
+
+=item $IN_FH.input_line_number  ...or some such
+
+May-be. Current line number for the filehandle. 
+Each filehandle in Perl counts the number of lines 
+that have been read from it. 
+(Depending on the value of $IN_FH.input_rec_separator, 
+Perl's idea of what constitutes a line may not match yours.) 
+When a line is read from a filehandle, 
+or when tell() or seek() is called on it, 
+$IN_FH.input_rec_separator becomes an alias to the 
+line counter for that filehandle.
+
+=over 4 
+
+=item p5:
+
+$.  $NR  $INPUT_LINE_NUMBER  HANDLE->input_line_number(EXPR)
+But now with cleaned-up localization usage.
+
+=back
+
+=back
+
+=over 8
+
+=item $IN_FH.input_rec_separator ...or some such
+
+The input record separator, newline by default. 
+This influences Perl's idea of what a ``line'' is. 
+Works like awk's RS variable, including treating empty lines 
+as a terminator if set to the null string. 
+(An empty line cannot contain any spaces or tabs.) 
+You may set it to a multi-character string to match a multi-character 
+terminator, or to undef to read through the end of file. 
+Setting it to "\n\n" means something slightly different 
+than setting to "", if the file contains consecutive empty lines. 
+Setting to "" will treat two or more consecutive empty lines 
+as a single empty line. Setting to "\n\n" will blindly assume 
+that the next input character belongs to the next paragraph, 
+even if it's a newline. 
+(Mnemonic: / delimits line boundaries when quoting poetry.)
+
+Remember: the value of $/ is a string, not a regex. 
+awk has to be better for something. :-)
+
+=over 4 
+
+=item p5:
+
+$/ $RS $INPUT_RECORD_SEPARATOR
+IO::Handle->input_record_separator(EXPR)
+
+=back
+
+=back
+
+=over 8
+
+=item $OUT_FH.autoflush  ...or some such
+
+If set to nonzero, forces a flush right away and after every write 
+or print on the currently selected output channel. 
+Default is 0 (regardless of whether the channel is really buffered 
+by the system or not; 
+$OUT_FH.autoflush tells you only whether you've asked Perl 
+explicitly to flush after each write). 
+$*OUT will typically be line buffered if output is to the 
+terminal and block buffered otherwise. 
+Setting this variable is useful primarily when you are 
+outputting to a pipe or socket, 
+such as when you are running a Perl program under rsh 
+and want to see the output as it's happening. 
+This has no effect on input buffering. 
+(Mnemonic: when you want your pipes to be piping hot.)
+
+=over 4 
+
+=item p5:
+
+$|  $OUTPUT_AUTOFLUSH  HANDLE->autoflush(EXPR)
+
+=back
+
+=back
+
+
+. . . More to come here . . .
+
+
+=head1 PERL 6 / PERL 5 COMPARISON
+
+=over 4
+
+Because a blank entry in either column could be taken to mean either 
+"not in Perl 6" or "unknown", the information as presented 
+below presumes an entry in both columns for every entry. 
+Options are:
+
+=over 6
+
+thing  as the var in question
+
+-      for "not in this Perl"
+
+?      for "don't know yet"
+
+=back
+
+Other organizational
+schemes may become appropriate when the table is more complete.
+
+=back
+
+ Perl 5         Perl 6         Comment
+ -----------    -----------    -----------------------
+ STDIN          $*IN
+
+ STDOUT         $*OUT
+
+ STDERR         $*ERR
+
+ $_             $_
+
+ $_[1],$_[2]..  $^a,$^b..  
+
+ $a,$b            -            Just params to anonymous block
+
+   -            $/             Object with results of last regex match
+
+ $1,$2,$3...    $1,$2,$3...
+
+ $&             $<>
+
+ $`             $<pre>
+
+ $'             $<post>
+
+ $+               -            But info can now be retrieved from $/
+
+ $^N            $*MOST_RECENT_CAPTURED_MATCH  ...or some such. 
+             or $/[-1]                        ...or omit
+             or $/[-$n] 
+
+ @+               $1.end, etc.
+ 
+ $*               -
+
+ $.             $IN_FH.input_line_number  ...or some such
+
+ $/             $IN_FH.input_rec_separator  ...or some such
+
+ ******* XXX the columns seem to have switched! *********
+
+ $OUT_FH.autoflush           ...or some such
+         $|  $OUTPUT_AUTOFLUSH
+             HANDLE->autoflush(EXPR)
+
+ $OUT_FH.output_field_separator   ...or some such
+         $,  $OFS $OUTPUT_FIELD_SEPARATOR
+             IO::Handle->output_field_separator
+
+ $OUT_FH.output_record_separator   ...or some such
+         $\  $ORS $OUTPUT_RECORD_SEPARATOR
+             IO::Handle->output_record_separator
+
+ -       $"  $LIST_SEPARATOR
+
+ -       $;  $SUBSEP $SUBSCRIPT_SEPARATOR
+
+ -       $#             Output format for printed numbers.
+
+ -       $%  $FORMAT_PAGE_NUMBER
+ -           HANDLE->format_page_number(EXPR)
+
+ -       $=  $FORMAT_LINES_PER_PAGE
+ -           HANDLE->format_lines_per_page(EXPR)
+
+ -       $-  $FORMAT_LINES_LEFT
+ -           HANDLE->format_lines_left(EXPR)
+
+ $1.start, etc.       @-  @LAST_MATCH_START
+
+ -       $~  $FORMAT_NAME
+ -           HANDLE->format_name(EXPR)
+
+ -       $^  $FORMAT_TOP_NAME
+ -           HANDLE->format_top_name(EXPR)
+
+ -       $:  $FORMAT_LINE_BREAK_CHARACTERS
+ -           IO::Handle->format_line_break_characters
+
+ -       $^L $FORMAT_FORMFEED
+ -           IO::Handle->format_formfeed
+
+ -       $^A $ACCUMULATOR
+
+
+ ?       ${^ENCODING}
+
+ $!                     Universal error object with as much info as
+                        you'd like on the current exception (unthrown 
+                        outside of CATCH, thrown inside).  Unthrown 
+                        exceptions are typically interesting values 
+                        of undef.
+ -       $!  $ERRNO $OS_ERROR
+ -       $?  $CHILD_ERROR
+ -       $@  $EVAL_ERROR
+ -       $^E $EXTENDED_OS_ERROR
+
+ -       %!
+
+ $*PID   $$  $PID $PROCESS_ID
+
+ $*UID                  ...or some such
+         $<  $UID $REAL_USER_ID
+ $*EUID                 ...or some such
+         $>  $EUID $EFFECTIVE_USER_ID
+ $*GID                  ...or some such
+         $(  $GID $REAL_GROUP_ID
+ $*EGID                 ...or some such
+         $)  $EGID $EFFECTIVE_GROUP_ID
+
+ $*PROGRAM_NAME         ...or some such
+         $0  $PROGRAM_NAME
+
+ -       $[             Index of the first element in an array, 
+                        and of the first character in a substring.
+
+ 
+ -       $^V $PERL_VERSION
+ -       $]             version + patchlevel / 1000 of Perl interpreter
+                        Replacement for the above two is unclear.
+
+ $*COMPILING            ...or some such
+         $^C $COMPILING
+
+ $*DEBUGGING            ...or some such
+         $^D $DEBUGGING
+
+ $*SYS_FD_MAX           ...or some such
+         $^F $SYSTEM_FD_MAX
+
+ -       $^H
+ -       %^H
+
+ $*INPLACE_EDIT         ...or some such
+         $^I $INPLACE_EDIT
+
+ $*EMERGENCY_MEMORY     ...or some such (or omit)
+         $^M
+
+ $*OSNAME               ...or some such
+         $^O $OSNAME
+
+ -       ${^OPEN}
+
+ $*PERLDB               ...or some such
+         $^P $PERLDB
+
+ $*LAST_REGEXP_CODE_RESULT   ...or some such. Or omit.
+         $^R $LAST_REGEXP_CODE_RESULT
+
+ $*BASETIME             ...or some such
+         $^T $BASETIME
+
+ ?       ${^TAINT}
+ ?       ${^UNICODE}
+
+ -       $^W $WARNING   Probably gone. But we need a reasonably
+                        granular way to suppress specific (groups
+                        of) warnings within both lexical and 
+                        dynamic scopes.
+
+ $?WARNINGS       ${^WARNING_BITS}
+
+ $*EXECUTABLE_NAME      ...or some such
+         $^X $EXECUTABLE_NAME
+
+ ?       $ARGV
+ 
+ $*ARGS  ARGV        Note the P6 idiom: 
+                        for =$*ARGS { 
+                           # each time through loop
+                           # proc a line from files named in ARGS 
+                        }
+
+ @*ARGS  @ARGV
+
+ $*ARGVOUT
+         ARGVOUT
+
+ @*INPLACE_AUTOSPLIT_FIELDS   ..or some such
+         @F
+
+ ?       @INC        Uncertain but we need a way to add to search path
+ ?       %INC        Uncertain but we need a way to add to search path
+
+ ?       @_
+
+
+ %*ENV   %ENV        Or %ENV
+
+ %*SIG   %SIG        Or possibly &*ON_SIGINT, etc. But then we'd need 
+                     to add some signal introspection in another way.
+
+ &*ON_WARN __WARN__
+ &*ON_DIE  __DIE__
+ &*ON_PARSEERROR
+ -       $^S $EXCEPTIONS_BEING_CAUGHT
+
+=head1 HISTORY
+
+ 2007-03-13 dvergin     Reference to docs/Perl6/Overview/Variable.pod
+ 2005-04-11 dvergin     Filling in more pieces
+ 2005-04-10 dvergin     Roughed in main table 
+ 2005-04-02 anonpugster Placeholder file containing Larry's email
+
+=head1 SOURCES
+
+At its present stage of development this file
+draws on a few key sources: Perl 5's perlvar.pod (for a full list of special
+vars in Perl 5) and a perl6-language list thread documented 
+below. E02 and S02 have also been helpful in several cases.
+
+A key resource in compiling the new material above 
+has been a thread on the perl6-language
+email list which can be found at: 
+
+  http://www.mail-archive.com/perl6-langu...@perl.org/msg18609.html
+
+For our present purposes, the most helpful item in that thread is the 
+head post found at the url given above. 
+It is an item by Larry Wall which is reproduced here:
+_________________________________________________________________
+
+ Mailing-List: contact perl6-language-h...@perl.org; run by ezmlm
+ Date: Sat, 26 Mar 2005 00:27:24 -0800
+ From: Larry Wall <la...@wall.org>
+ To: perl6-compi...@perl.org
+ Cc: perl6-langu...@perl.org
+ Subject: S28ish [was: [Pugs] A couple of string interpolation edge cases]
+ 
+ On Sat, Mar 26, 2005 at 02:11:29PM +0800, Audrey Tang wrote:
+ : On Fri, Mar 25, 2005 at 10:03:45PM -0800, Larry Wall wrote:
+ : > Hmm, well, if it got that far.  Given strict being on by default,
+ : > this particular example should probably just die on the fact that $"
+ : > isn't declared, since there's no $" in Perl 6.
+ : 
+ : Is $" okay as a variable name?  Is everything from perlvar.pod legal? :)
+ 
+ Considering nobody's written perlvar.pod for Perl 6 yet, yeah, everything
+ in that pod is legal.  :-)
+ 
+ :     my $" = 3;
+ : 
+ : Pugs parses that because it only considers $! and $/ as legal
+ : symbolic variable names.
+ 
+ $! will be a legal variable name.  $/ is going away, as is $", which
+ means they fail under "use strict", but they'd still autocreate
+ globals under laxity as Perl 5 does.  (I know Perl 5 exempted all
+ special variables from strict, but I don't see why we have to do
+ that for Perl 6.  Merely having $_ in the lexical scope or $*! in the
+ global scope should be sufficient declaration to get around strict.
+ Though perhaps we can exempt people from having to write $*! under
+ strict.  In fact, that probably goes for all predeclared $* names,
+ so $IN is legal for $*IN as long as you don't have "my $IN" hiding
+ it.  Another way to look at it is that * variables are basically
+ autodeclared "our" implicitly in the outermost lexical scope.)
+ 
+ Sigh, I'd better rough it all in here, even if I don't have time to
+ do a good job on it.  Maybe somebody can beat this into a real S28 pod.
+ 
+ $? and $@ are gone, merged in with $!.  (Frees up ? twigil for $?FOO
+ syntax.)  $^E is merged too.  $! is an object with as much info as
+ you'd like on the current exception (unthrown outside of CATCH, thrown
+ inside).  Unthrown exceptions are typically interesting values of undef.
+ 
+ $$ is now $*PID.  ($$foo is now unambiguous.)
+ 
+ $0 is gone in favor of $*PROGRAM_NAME or some such.
+ 
+ Anything that varied with the selected output filehandle like $|
+ is now a method on that filehande, and the variables don't exist.
+ (The p5-to-p6 translator will probably end up depending on some
+ $Perl5ish::selected_output_filehandle variable to emulate Perl 5's
+ single-arg select().)  Likewise $/ and $. should be attached to
+ a particular input filehandle.  (In fact, $/ is now the result of
+ the last regular expression match, though we might keep the idea of
+ $. around in some form or other just because it's awfully handy for
+ error messages.  But the localizing $. business is yucky.  We have
+ to clean that up.)
+ 
+ All the special format variables ($%, $=, $-, $:, $~, $^, $^A, $^L)
+ are gone.  (Frees up the = twigil for %= POD doc structures and
+ old __DATA__ stream, the : twigil for private attributes, and the ~
+ twigil for autodeclared parameters.)
+ 
+ $`, $', and $+ don't exist any more, but you can dig that info out
+ of $/'s structures.  Shortcuts into $/ include $1, $2, and such, and
+ the newfangled $<foo> things.  Also, $& is changed to $0 for the whole
+ matched string.  $` and $' may be $<pre> and $<post>, but you probably
+ have to explicitly match <pre> and <post> to get them remembered,
+ so we don't have a repeat of the Perl 5 sawampersand fiasco.  <pre>
+ and <post> would automatically exclude themselves from $0.  Or you
+ need some special flag to remember them, maybe.
+ 
+ %+ and %- are gone.  $0, $1, $2,  etc. are all objects that know
+ where they .start and .end.  (Mind you, those methods return magical
+ positions that are Unicode level independent.)
+ 
+ $* and $# have been deprecated half of forever and are gone.  $[
+ is a fossil that I suppose could turn into an evil pragma, if we
+ try to translate it at all.  (Frees up * twigil for $*FOO syntax.)
+ 
+ $(, $), $<, and $> should all change to various $*FOO names.  $] is either
+ something in $* or a trait of the Perl namespace.  Likewise $^V, if
+ they aren't in fact merged.
+ 
+ ${...} is reserved for hard refs only now.  ($::(...) must be used
+ for symbolics refs.)  ${^foo} should just change to $*foo or $*_foo
+ or some such.
+ 
+ $; is gone because the multidim hash hack is gone.  $" is gone,
+ replaced by @foo.join(":") or some such.  Likewise for $, in print
+ statements.
+ 
+ We never did find a use for $}, thank goodness.
+ 
+ And we still are keeping $_ around, though it's lexically scoped.
+ 
+ Let's see, what other damage can we do to perlvar.  $a and $b are
+ no longer special.  No bareword filehandles.  $*IN, $*OUT, $*ERR.
+ Args come in @*ARGS rather than @ARGV.  (Environment still in %ENV,
+ will wonders never cease.)  I don't know whether @INC and %INC will
+ make as much sense when we're looking installed modules in a database,
+ though I suppose you still have to let the user add places to look.
+ 
+ %SIG is now %*SIG.  The __DIE__ and __WARN__ hooks should be brought
+ out as separate &*ON_DIE and &*ON_WARN variables--they really
+ have nothing to do with signals.  I suppose we could even do away
+ with %SIG and replace it with &*ON_SIGINT and such, though then we'd
+ lose a bit of signal introspection which would have to be provided
+ some other way.  Oh, and we probably ought to split out &?ON_PARSEERROR
+ from $*ON_DIE to get rid of the $^S fiasco of Perl 5.
+ 
+ $^C, $^D, $^F, $^I, $^M, $^O, $^P, $^S, $^T, $^V, $^X are all renamed
+ to something $*FOOish, at least the ones that aren't going away entirely.
+ 
+ $^W is is too blunt an instrument even in Perl 5, so it's probably gone.
+ 
+ I'm not quite sure what to do with $^N or $^R yet.  Most likely they
+ end up as something $<foo>ish, if they stay.
+ 
+ You weren't ever supposed to know about $^H and %^H.  Or %{^FNORD}...
+ 
+ Other things might show up as global variables in support of
+ command-line options, like $*ARGVOUT or @*F.  Some of the special
+ variables we've blissfull relegated to the trash heap might
+ creep back in as global variables that just happen to know about
+ $*Perl5ish::current_selected_filehandle and such, but we should
+ probably try to keep them as lvalue subs in &Perl5ish::ors() and such.
+ 
+ Anyway, it's all negotiable, except for the parts that aren't.
+ 
+ Larry
+
+=cut
+
+

Reply via email to