[perl #131097] Why doesn't Perl 6's try handle a non-zero exit in shell()?

2017-04-04 Thread Zoffix Znet via RT
On Tue, 04 Apr 2017 02:52:53 -0700, comdog wrote:
> I originally asked about this on Stackoverflow
> (http://stackoverflow.com/q/43199427/2766176)
> 
> This `try` catches the exception:
> 
> try die X::AdHoc;
> say "Got to the end";
> 
> The output shows that the program continues:
> 
> Got to the end
> 
> If I attempt it with `shell` and a command that doesn't exit with 0,
> the `try` doesn't catch it:
> 
> try shell('/usr/bin/false');
> say "Got to the end";
> 
> The output doesn't look like an exception:
> 
> The spawned command '/usr/bin/false' exited unsuccessfully (exit code:
> 1)
>   in block  at ... line ...
> 
> What's going on that this makes it through the `try`?
> 
> --- Perl variables ---
> Perl:   Perl 6
> Executable: perl6
> Flavor: Rakudo 2017.01
> VM: MoarVM 2017.01
> Distro: macosx
> Kernel: darwin
> PERL6LIB:
> 
> --- Other Environment ---
> LANG: en_US.UTF-8
> LANGUAGE: en_US.UTF-8
> LC_ALL: en_US.UTF-8
> LESSCHARSET: utf-8
> LOCALE_I_WANT: en_US.UTF-8
> LOCAL_PATH: /usr/local/bin
> SHELL: /bin/bash
> SHLVL: 1
> TERM: vt100


Thank you for the report. However, there's no bug here.

try catches exceptions. shell() doesn't throw, but returns a Proc object.
Proc objects with non-zero exist status throw when sunk.

So in your code, the try gives a Proc object a pass, it immediately gets sunk, 
and explodes (outside of try).

You can use `try sink shell '/usr/bin/false'` to get it to explode inside of 
try. 

We also have a support channel where you can ask questions like this one: 
https://webchat.freenode.net/?channels=#perl6


Re: [perl #131097] Why doesn't Perl 6's try handle a non-zero exit in shell()?

2017-04-04 Thread Elizabeth Mattijsen
Thanks for reporting!

Turns out this isn’t actually a bug, but the way shell() works.  As Jonathan 
explained at:

  https://irclog.perlgeek.de/perl6-dev/2017-04-04#i_14372945

the shell() function returns a Proc object.  This only throws the shelling out 
failed and the Proc object is sunk.

So ENOTABUG.

> On 4 Apr 2017, at 11:52, brian d foy (via RT)  
> wrote:
> 
> # New Ticket Created by  "brian d foy" 
> # Please include the string:  [perl #131097]
> # in the subject line of all future correspondence about this issue. 
> # https://rt.perl.org/Ticket/Display.html?id=131097 >
> 
> 
> I originally asked about this on Stackoverflow
> (http://stackoverflow.com/q/43199427/2766176)
> 
> This `try` catches the exception:
> 
>try die X::AdHoc;
>say "Got to the end";
> 
> The output shows that the program continues:
> 
> Got to the end
> 
> If I attempt it with `shell` and a command that doesn't exit with 0,
> the `try` doesn't catch it:
> 
>try shell('/usr/bin/false');
>say "Got to the end";
> 
> The output doesn't look like an exception:
> 
>The spawned command '/usr/bin/false' exited unsuccessfully (exit code: 1)
>  in block  at ... line ...
> 
> What's going on that this makes it through the `try`?
> 
> --- Perl variables ---
> Perl:   Perl 6
> Executable: perl6
> Flavor: Rakudo 2017.01
> VM: MoarVM 2017.01
> Distro: macosx
> Kernel: darwin
> PERL6LIB:
> 
> --- Other Environment ---
> LANG: en_US.UTF-8
> LANGUAGE: en_US.UTF-8
> LC_ALL: en_US.UTF-8
> LESSCHARSET: utf-8
> LOCALE_I_WANT: en_US.UTF-8
> LOCAL_PATH: /usr/local/bin
> SHELL: /bin/bash
> SHLVL: 1
> TERM: vt100
> 
> -- 
> brian d foy 
> http://www.pair.com/~comdog/


[perl #131097] Why doesn't Perl 6's try handle a non-zero exit in shell()?

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


I originally asked about this on Stackoverflow
(http://stackoverflow.com/q/43199427/2766176)

This `try` catches the exception:

try die X::AdHoc;
say "Got to the end";

The output shows that the program continues:

 Got to the end

If I attempt it with `shell` and a command that doesn't exit with 0,
the `try` doesn't catch it:

try shell('/usr/bin/false');
say "Got to the end";

The output doesn't look like an exception:

The spawned command '/usr/bin/false' exited unsuccessfully (exit code: 1)
  in block  at ... line ...

What's going on that this makes it through the `try`?

--- Perl variables ---
Perl:   Perl 6
Executable: perl6
Flavor: Rakudo 2017.01
VM: MoarVM 2017.01
Distro: macosx
Kernel: darwin
PERL6LIB:

--- Other Environment ---
LANG: en_US.UTF-8
LANGUAGE: en_US.UTF-8
LC_ALL: en_US.UTF-8
LESSCHARSET: utf-8
LOCALE_I_WANT: en_US.UTF-8
LOCAL_PATH: /usr/local/bin
SHELL: /bin/bash
SHLVL: 1
TERM: vt100

-- 
brian d foy 
http://www.pair.com/~comdog/