# New Ticket Created by  "brian d foy" 
# Please include the string:  [perl #130418]
# in the subject line of all future correspondence about this issue. 
# <URL: https://rt.perl.org/Ticket/Display.html?id=130418 >


Using chdir with a non-existent directory appear to throw the exception
immediately rather than using fail. The docs say
(https://docs.perl6.org/type/IO$COLON$COLONPath#routine_chdir):

    If the directory change is successful then the IO::Path representing
    the target directory is returned, otherwise it will fail with X::IO::Chdir.

Here's what I was doing. I expected to get a Failure object back from
chdir, which would be "handled" by being evaluated in Boolean context.
It would return False and run the unless block:

    put 'Current working directory is ' ~ $*CWD;

    my $file = '/not-there.txt';
    put "$file is there: " ~ $file.IO.e;

    unless my $r = chdir $file {
        my $e = $r.exception;
        put "UNLESS: chdir failed: " ~ $e.^name ~ "\n" ~ $e.message;
        exit;
        }
    CATCH {
        put "CATCH: chdir failed: " ~ .^name ~ "\n" ~ .message;
        exit;
        }

    say "Cwd is now " ~ $*CWD;

Instead, CATCH handles the immediately thrown exception:

    Current working directory is /Users/brian/Dropbox/~~Writing/Perl
Writing/LearningPerl6/learning_perl_6/scratch
    CATCH: chdir failed: X::IO::Chdir
    Failed to change the working directory to '/not-there.txt': does not exist
    Failed to change the working directory to '/not-there.txt': does not exist
      in block <unit> at /Users/brian/Dropbox/~~Writing/Perl
Writing/LearningPerl6/learning_perl_6/scratch/files.p6 line 8

    Actually thrown at:
      in any  at gen/moar/m-Metamodel.nqp line 3096
      in block <unit> at /Users/brian/Dropbox/~~Writing/Perl
Writing/LearningPerl6/learning_perl_6/scratch/files.p6 line 8

Reply via email to