On 2017-05-01 01:38:14, c...@zoffix.com wrote:
> > On 23 Jun 2015, at 15:37, Rob Hoelz (via RT) <perl6-bugs-
> > follo...@perl.org> wrote:
> > Unlinking a non-existent file should fail() rather than return True.
> 
> The end-goal of .unlinking stuff is for the file to stop existing.
> IMO that goal is achieved even if the method is called for non-
> existent files,
> so there's no failure to fail with. 

Maybe I'm thinking too Unix-centric with this, but since unlink(2) raises 
ENOENT when the entry doesn't exist, I think Perl 6 implementations should 
reflect that behavior.  A quick example for why failing on a non-existent file 
should be done is let's say I'm writing data to a file and I want to clean it 
up after I'm done working with it.  If I create a bug that mistakenly alters 
the filename, a non-failing unlink will silently succeed, but I will *think* 
the file has been cleaned up.  This behavior has the potential to retain 
sensitive data, can go undetected for a long time, and would be non-obvious to 
track down.  Not every program needs this behavior, but Perl 6 has an "error by 
default" policy and facilities for suppressing these errors, so I think we 
should still treat unlinking a non-existent file as a failure.

> Also, this behaviour mirrors what
> Perl 5 does,
> if I recall.

Perl 5 signals failure when the file doesn't exist:

  $ touch one
  $ perl -le 'print unlink("one") ? 1 : 0'
  1
  $ perl -le 'print unlink("one") ? 1 : 0'
  0
> 
> I'm going to untake this ticket (as far as IO grant is concerned) and
> re-tag
> is as JVM-only issue in need to remove ability of removing directories
> from
> this method.
> 
> -- IO grant

Reply via email to