Hmm, in developing this I was using an old perl6:

This is rakudo version 2015.11-554-g3b4964b built on MoarVM version
2015.11-49-g27f15d9 implementing Perl v6.b.

I updated perl6 to the one that comes with Fedora:

This is Rakudo version 2017.08 built on MoarVM version 2017.08.1
implementing Perl 6.c

Now when I run this program I get an exception when I do:

close $dir-channel;

Tried to get the result of a broken Promise
  in block <unit> at ./traverse-dir0.p6 line 7

Original exception:
    Cannot resolve caller close(Channel); none of these signatures match:
        (IO::Handle:D $fh)
      in block  at ./traverse-dir0.p6 line 12

However, if I change the line 12 to:

$dir-channel.close;

The program does not throw and exception on this line and runs properly.



On 30 October 2017 at 16:58, Norman Gaywood <ngayw...@une.edu.au> wrote:

> Looking at Andrew Shitov's new "Using Perl6" book and was playing around
> with his "94. Parallel file processing" and came up with the following (I
> think nice) example.
>
> # There is a thread to populate $dir-channel by reading filenames in a
> directory with dir()
> # and $N worker threads to read the filenames from the $dir-channel.
>
> use v6;
>
> sub MAIN( $dir = ".", :$N = 4 ) {
>
>     my $dir-channel = Channel.new();
>     my $dir-read = start {
>         $dir-channel.send( $_ ) for dir $dir;
>         close $dir-channel;
>     }
>
>     my @workers = (^$N).map: {
>         start {
>             while my $file = $dir-channel.receive() {
>                 say $file.path;
>             }
>             CATCH {
>                 when X::Channel::ReceiveOnClosed { .resume }
>             }
>         }
>     }
>
>     await $dir-read, @workers;
> }
>
>
> --
> Norman Gaywood, Computer Systems Officer
> School of Science and Technology
> University of New England
> Armidale NSW 2351, Australia
>
> ngayw...@une.edu.au  http://turing.une.edu.au/~ngaywood
> Phone: +61 (0)2 6773 2412 <(02)%206773%202412>  Mobile: +61 (0)4 7862 0062
>
> Please avoid sending me Word or Power Point attachments.
> See http://www.gnu.org/philosophy/no-word-attachments.html
>



-- 
Norman Gaywood, Computer Systems Officer
School of Science and Technology
University of New England
Armidale NSW 2351, Australia

ngayw...@une.edu.au  http://turing.une.edu.au/~ngaywood
Phone: +61 (0)2 6773 2412  Mobile: +61 (0)4 7862 0062

Please avoid sending me Word or Power Point attachments.
See http://www.gnu.org/philosophy/no-word-attachments.html

Reply via email to