This and other RFCs are available on the web at
  http://dev.perl.org/rfc/

=head1 TITLE

List context return from filesystem functions

=head1 VERSION

       Maintainer: Peter Scott <[EMAIL PROTECTED]>
       Date: 6 Aug 2000
       Last Modified: 3 Sep 2000
       Mailing List: [EMAIL PROTECTED]
       Version: 3
       Number: 52
       Status: Withdrawn

=head1 ABSTRACT

*** THIS RFC IS WITHDRAWN. ***

Text of the last version is preserved below so that we have some memory of
the bad ideas as well as the good ones, in case it helps.

Reason for withdrawal: while the idea of keeping error codes for individual
failures of filesystem calls affecting multiple files is good, the syntax
isn't; it is just wrong to return a non-empty list in the case of even
partial failure but an empty list in the case of complete success.  This
little one's not worth the trouble.

*** READ NO FURTHER EXCEPT FOR HISTORICAL CURIOSITY. ***

C<chmod>, C<chown>, and C<unlink> return the I<number> of successfully
affected files.  I suggest that in a list context, they return the I<names>
of the I<unsuccessfully> affected files.  Add C<rmdir> to that list as
well, since although it currently only takes one directory name as input,
there is no reason it shouldn't take a list.

=head1 DESCRIPTION

In a scalar context, the result should remain the same as it is now.  It is
very tempting to make the list context return be the I<successfully>
altered files, which is far more intuitive given the scalar context
behavior; but that is almost certainly not the list the user will be
interested in and they'd just end up doing the C<grep> suggested in the
docs (Camel III) anyway, which calls the filesystem function once for each
file.

=head2 Hash Context

When the result is assigned to a hash, the list returned could be the names
of the unsuccessfully modified files and their corresponding C<$!> errors.

=head1 IMPLEMENTATION

Examples of use:

       # Current behavior: scalar context
       chmod 755, grep -d, glob '*' or die "Couldn't chmod dirs"

       # List context behavior
       warn "Unable to modify $_" for chown $uid, $gid, @files;

       # Hash context behavior
       %error = rmdir grep -d, glob '*';
       warn "Couldn't remove $_: $error{$_}" for keys %error;

It would be nice to include C<mkdir> in this list as well, but there
appears to be no way of doing that without radically changing its
interface, or forcing the I<MASK> argument to be included, or interpreting
an initial argument that looks like a I<MASK> to be one.  None of those appeal.

=head1 REFERENCES

L<perlfunc>

Camel III function list (the entry for C<chmod> is different from the one
in perl-current at the moment).

Reply via email to