From dpchrist at holgerdanske.com Sat Aug 1 00:10:10 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Sat, 1 Aug 2020 00:10:10 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" Message-ID: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> sanfrancisco-pm: I have a Linux computer: 2020-07-31 23:24:49 dpchrist at tinkywinky ~/sandbox/perl $ cat /etc/debian_version ; uname -a ; perl -v | head -n 3 9.13 Linux tinkywinky 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1+deb9u1 (2020-06-07) x86_64 GNU/Linux This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linux-gnu-thread-multi (with 90 registered patches, see perl -V for more detail) I am working on a Perl 5 library that uses threads. If code in a child thread throws an exception, I want the exception message to be printed; except during testing. I have found that: no warnings 'threads' when placed before, and in the same block as, threads->create() will suppress printing of the exception message: 2020-07-31 23:43:08 dpchrist at tinkywinky ~/sandbox/perl $ cat thread-exception.pl #!perl use strict; use warnings; use threads; use Test::More; use Test::Exception; our $thr; our $test_mode; sub foo { if ($test_mode) { no warnings 'threads'; $thr = threads->create( sub { die "hello, world!" } ); } else { $thr = threads->create( sub { die "hello, world!" } ); } } ok foo, __FILE__ . __LINE__; # 1 is $thr->join, undef, __FILE__ . __LINE__; # 2 like $thr->error, qr/hello/, __FILE__ . __LINE__; # 3 $test_mode = 1; ok foo, __FILE__ . __LINE__; # 4 is $thr->join, undef, __FILE__ . __LINE__; # 5 like $thr->error, qr/hello/, __FILE__ . __LINE__; # 6 done_testing; 2020-07-31 23:43:11 dpchrist at tinkywinky ~/sandbox/perl $ perl thread-exception.pl Thread 1 terminated abnormally: hello, world! at thread-exception.pl line 23. ok 1 - thread-exception.pl28 ok 2 - thread-exception.pl30 ok 3 - thread-exception.pl32 ok 4 - thread-exception.pl36 ok 5 - thread-exception.pl38 ok 6 - thread-exception.pl40 1..6 I was unable to figure out how to conditionally perform "no warnings 'threads'" in the body of foo(), so I had to copy-and-paste the body into both halves of an if-else conditional and disable warnings in one block. This is an ugly work-around. I was hoping for: no warnings 'threads' if $test_mode; # BAD CODE But, that code does not work; 2020-07-31 23:56:50 dpchrist at tinkywinky ~/sandbox/perl $ cat no-warnings-threads-if-1.pl #!perl use strict; use warnings; no warnings 'threads' if 1; 2020-07-31 23:56:53 dpchrist at tinkywinky ~/sandbox/perl $ perl no-warnings-threads-if-1.pl syntax error at no-warnings-threads-if-1.pl line 6, near "'threads' if" Execution of no-warnings-threads-if-1.pl aborted due to compilation errors. Any comments or suggestions? David From not.com at gmail.com Sat Aug 1 16:11:10 2020 From: not.com at gmail.com (yary) Date: Sat, 1 Aug 2020 19:11:10 -0400 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> Message-ID: I think you have the condition backwards? my $test_mode; BEGIN { $test_mode=1 } no if $test_mode, qw[warnings threads]; perldoc if *NAME* if - "use" a Perl module if a condition holds *SYNOPSIS* use if CONDITION, "MODULE", ARGUMENTS; no if CONDITION, "MODULE", ARGUMENTS; -y On Sat, Aug 1, 2020 at 3:10 AM David Christensen wrote: > sanfrancisco-pm: > > I have a Linux computer: > > 2020-07-31 23:24:49 dpchrist at tinkywinky ~/sandbox/perl > $ cat /etc/debian_version ; uname -a ; perl -v | head -n 3 > 9.13 > Linux tinkywinky 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1+deb9u1 > (2020-06-07) x86_64 GNU/Linux > > This is perl 5, version 24, subversion 1 (v5.24.1) built for > x86_64-linux-gnu-thread-multi > (with 90 registered patches, see perl -V for more detail) > > > I am working on a Perl 5 library that uses threads. If code in a child > thread throws an exception, I want the exception message to be printed; > except during testing. > > > I have found that: > > no warnings 'threads' > > when placed before, and in the same block as, threads->create() will > suppress printing of the exception message: > > 2020-07-31 23:43:08 dpchrist at tinkywinky ~/sandbox/perl > $ cat thread-exception.pl > #!perl > > use strict; > use warnings; > use threads; > > use Test::More; > use Test::Exception; > > our $thr; > our $test_mode; > > sub foo > { > if ($test_mode) { > no warnings 'threads'; > > $thr = threads->create( > sub { die "hello, world!" } > ); > } else { > $thr = threads->create( > sub { die "hello, world!" } > ); > } > } > > ok foo, __FILE__ . __LINE__; # 1 > > is $thr->join, undef, __FILE__ . __LINE__; # 2 > > like $thr->error, qr/hello/, __FILE__ . __LINE__; # 3 > > $test_mode = 1; > > ok foo, __FILE__ . __LINE__; # 4 > > is $thr->join, undef, __FILE__ . __LINE__; # 5 > > like $thr->error, qr/hello/, __FILE__ . __LINE__; # 6 > > done_testing; > > 2020-07-31 23:43:11 dpchrist at tinkywinky ~/sandbox/perl > $ perl thread-exception.pl > Thread 1 terminated abnormally: hello, world! at thread-exception.pl > line 23. > ok 1 - thread-exception.pl28 > ok 2 - thread-exception.pl30 > ok 3 - thread-exception.pl32 > ok 4 - thread-exception.pl36 > ok 5 - thread-exception.pl38 > ok 6 - thread-exception.pl40 > 1..6 > > > I was unable to figure out how to conditionally perform "no warnings > 'threads'" in the body of foo(), so I had to copy-and-paste the body > into both halves of an if-else conditional and disable warnings in one > block. This is an ugly work-around. > > > I was hoping for: > > no warnings 'threads' if $test_mode; # BAD CODE > > > But, that code does not work; > > 2020-07-31 23:56:50 dpchrist at tinkywinky ~/sandbox/perl > $ cat no-warnings-threads-if-1.pl > #!perl > > use strict; > use warnings; > > no warnings 'threads' if 1; > > 2020-07-31 23:56:53 dpchrist at tinkywinky ~/sandbox/perl > $ perl no-warnings-threads-if-1.pl > syntax error at no-warnings-threads-if-1.pl line 6, near "'threads' if" > Execution of no-warnings-threads-if-1.pl aborted due to compilation > errors. > > > Any comments or suggestions? > > > David > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > https://mail.pm.org/mailman/listinfo/sanfrancisco-pm > -------------- next part -------------- An HTML attachment was scrubbed... URL: From doomvox at gmail.com Sat Aug 1 16:12:33 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Sat, 1 Aug 2020 16:12:33 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> Message-ID: This sort of thing works: my $test_mode = 0; { no if $test_mode, 'uninitialized'; my $nada = undef; my $string = "Nothing much: $nada"; say "$string"; } On 8/1/20, David Christensen wrote: > sanfrancisco-pm: > > I have a Linux computer: > > 2020-07-31 23:24:49 dpchrist at tinkywinky ~/sandbox/perl > $ cat /etc/debian_version ; uname -a ; perl -v | head -n 3 > 9.13 > Linux tinkywinky 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1+deb9u1 > (2020-06-07) x86_64 GNU/Linux > > This is perl 5, version 24, subversion 1 (v5.24.1) built for > x86_64-linux-gnu-thread-multi > (with 90 registered patches, see perl -V for more detail) > > > I am working on a Perl 5 library that uses threads. If code in a child > thread throws an exception, I want the exception message to be printed; > except during testing. > > > I have found that: > > no warnings 'threads' > > when placed before, and in the same block as, threads->create() will > suppress printing of the exception message: > > 2020-07-31 23:43:08 dpchrist at tinkywinky ~/sandbox/perl > $ cat thread-exception.pl > #!perl > > use strict; > use warnings; > use threads; > > use Test::More; > use Test::Exception; > > our $thr; > our $test_mode; > > sub foo > { > if ($test_mode) { > no warnings 'threads'; > > $thr = threads->create( > sub { die "hello, world!" } > ); > } else { > $thr = threads->create( > sub { die "hello, world!" } > ); > } > } > > ok foo, __FILE__ . __LINE__; # 1 > > is $thr->join, undef, __FILE__ . __LINE__; # 2 > > like $thr->error, qr/hello/, __FILE__ . __LINE__; # 3 > > $test_mode = 1; > > ok foo, __FILE__ . __LINE__; # 4 > > is $thr->join, undef, __FILE__ . __LINE__; # 5 > > like $thr->error, qr/hello/, __FILE__ . __LINE__; # 6 > > done_testing; > > 2020-07-31 23:43:11 dpchrist at tinkywinky ~/sandbox/perl > $ perl thread-exception.pl > Thread 1 terminated abnormally: hello, world! at thread-exception.pl > line 23. > ok 1 - thread-exception.pl28 > ok 2 - thread-exception.pl30 > ok 3 - thread-exception.pl32 > ok 4 - thread-exception.pl36 > ok 5 - thread-exception.pl38 > ok 6 - thread-exception.pl40 > 1..6 > > > I was unable to figure out how to conditionally perform "no warnings > 'threads'" in the body of foo(), so I had to copy-and-paste the body > into both halves of an if-else conditional and disable warnings in one > block. This is an ugly work-around. > > > I was hoping for: > > no warnings 'threads' if $test_mode; # BAD CODE > > > But, that code does not work; > > 2020-07-31 23:56:50 dpchrist at tinkywinky ~/sandbox/perl > $ cat no-warnings-threads-if-1.pl > #!perl > > use strict; > use warnings; > > no warnings 'threads' if 1; > > 2020-07-31 23:56:53 dpchrist at tinkywinky ~/sandbox/perl > $ perl no-warnings-threads-if-1.pl > syntax error at no-warnings-threads-if-1.pl line 6, near "'threads' if" > Execution of no-warnings-threads-if-1.pl aborted due to compilation errors. > > > Any comments or suggestions? > > > David > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > https://mail.pm.org/mailman/listinfo/sanfrancisco-pm > From doomvox at gmail.com Sat Aug 1 16:25:33 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Sat, 1 Aug 2020 16:25:33 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> Message-ID: > I think you have the condition backwards? Could be, I didn't remember what David was going for. On 8/1/20, yary wrote: > I think you have the condition backwards? > my $test_mode; > BEGIN { $test_mode=1 } > no if $test_mode, qw[warnings threads]; > > > > perldoc if > > *NAME* > > if - "use" a Perl module if a condition holds > > > *SYNOPSIS* > > use if CONDITION, "MODULE", ARGUMENTS; > > no if CONDITION, "MODULE", ARGUMENTS; > > -y > > > On Sat, Aug 1, 2020 at 3:10 AM David Christensen > > wrote: > >> sanfrancisco-pm: >> >> I have a Linux computer: >> >> 2020-07-31 23:24:49 dpchrist at tinkywinky ~/sandbox/perl >> $ cat /etc/debian_version ; uname -a ; perl -v | head -n 3 >> 9.13 >> Linux tinkywinky 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1+deb9u1 >> (2020-06-07) x86_64 GNU/Linux >> >> This is perl 5, version 24, subversion 1 (v5.24.1) built for >> x86_64-linux-gnu-thread-multi >> (with 90 registered patches, see perl -V for more detail) >> >> >> I am working on a Perl 5 library that uses threads. If code in a child >> thread throws an exception, I want the exception message to be printed; >> except during testing. >> >> >> I have found that: >> >> no warnings 'threads' >> >> when placed before, and in the same block as, threads->create() will >> suppress printing of the exception message: >> >> 2020-07-31 23:43:08 dpchrist at tinkywinky ~/sandbox/perl >> $ cat thread-exception.pl >> #!perl >> >> use strict; >> use warnings; >> use threads; >> >> use Test::More; >> use Test::Exception; >> >> our $thr; >> our $test_mode; >> >> sub foo >> { >> if ($test_mode) { >> no warnings 'threads'; >> >> $thr = threads->create( >> sub { die "hello, world!" } >> ); >> } else { >> $thr = threads->create( >> sub { die "hello, world!" } >> ); >> } >> } >> >> ok foo, __FILE__ . __LINE__; # 1 >> >> is $thr->join, undef, __FILE__ . __LINE__; # 2 >> >> like $thr->error, qr/hello/, __FILE__ . __LINE__; # 3 >> >> $test_mode = 1; >> >> ok foo, __FILE__ . __LINE__; # 4 >> >> is $thr->join, undef, __FILE__ . __LINE__; # 5 >> >> like $thr->error, qr/hello/, __FILE__ . __LINE__; # 6 >> >> done_testing; >> >> 2020-07-31 23:43:11 dpchrist at tinkywinky ~/sandbox/perl >> $ perl thread-exception.pl >> Thread 1 terminated abnormally: hello, world! at thread-exception.pl >> line 23. >> ok 1 - thread-exception.pl28 >> ok 2 - thread-exception.pl30 >> ok 3 - thread-exception.pl32 >> ok 4 - thread-exception.pl36 >> ok 5 - thread-exception.pl38 >> ok 6 - thread-exception.pl40 >> 1..6 >> >> >> I was unable to figure out how to conditionally perform "no warnings >> 'threads'" in the body of foo(), so I had to copy-and-paste the body >> into both halves of an if-else conditional and disable warnings in one >> block. This is an ugly work-around. >> >> >> I was hoping for: >> >> no warnings 'threads' if $test_mode; # BAD CODE >> >> >> But, that code does not work; >> >> 2020-07-31 23:56:50 dpchrist at tinkywinky ~/sandbox/perl >> $ cat no-warnings-threads-if-1.pl >> #!perl >> >> use strict; >> use warnings; >> >> no warnings 'threads' if 1; >> >> 2020-07-31 23:56:53 dpchrist at tinkywinky ~/sandbox/perl >> $ perl no-warnings-threads-if-1.pl >> syntax error at no-warnings-threads-if-1.pl line 6, near "'threads' if" >> Execution of no-warnings-threads-if-1.pl aborted due to compilation >> errors. >> >> >> Any comments or suggestions? >> >> >> David >> _______________________________________________ >> SanFrancisco-pm mailing list >> SanFrancisco-pm at pm.org >> https://mail.pm.org/mailman/listinfo/sanfrancisco-pm >> > From dpchrist at holgerdanske.com Sat Aug 1 18:39:01 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Sat, 1 Aug 2020 18:39:01 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> Message-ID: On 2020-08-01 16:11, yary wrote: > I think you have the condition backwards? > my $test_mode; > BEGIN { $test_mode=1 } > no if $test_mode, qw[warnings threads]; > > > > perldoc if Thank you for directing me to conditional 'use' and 'no'. These will be useful. :-) David From dpchrist at holgerdanske.com Sat Aug 1 18:40:38 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Sat, 1 Aug 2020 18:40:38 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> Message-ID: On 2020-08-01 16:12, Joseph Brenner wrote: > This sort of thing works: > > my $test_mode = 0; > { > no if $test_mode, 'uninitialized'; > my $nada = undef; > my $string = "Nothing much: $nada"; > say "$string"; > } Thank you. :-) David From dpchrist at holgerdanske.com Sat Aug 1 19:12:04 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Sat, 1 Aug 2020 19:12:04 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> Message-ID: <83685025-6e5f-47ea-2598-c27db663bd27@holgerdanske.com> On 2020-08-01 00:10, David Christensen wrote: > sanfrancisco-pm: > sub foo > { > ??? if ($test_mode) { > ????no warnings 'threads'; > > ????$thr = threads->create( > ??????? sub { die "hello, world!" } > ????); > ??? } else { > ????$thr = threads->create( > ??????? sub { die "hello, world!" } > ????); > ??? } > } "no warnings 'threads'" seemed overly broad, and was bugging me. So, I came up with another approach -- use an eval-apply design pattern inside the child thread. The inner code becomes an expression and fits into a ternary conditional. Child errors are saved into a shared lookup table. All exception messages should be caught (except those that crash Perl?). Expected exception messages will pass test cases and unexpected messages will fail test cases: 2020-08-01 18:59:02 dpchrist at tinkywinky ~/sandbox/perl $ cat thread-exception-eval.pl #!perl use strict; use warnings; use threads; use Data::Dumper; use Test::More; our $test_mode; our %tid_ee :shared; sub bar { die @_ }; sub foo { threads->create( sub { my $f = shift; my $r = $test_mode ? eval { $f->(@_) } : $f->(@_); $tid_ee{threads->tid} = $@; return $r; }, @_ ); } my $thr; ok $thr = foo(\&bar, "hello, world!"), __FILE__ . __LINE__; # 1 is $thr->join, undef, __FILE__ . __LINE__; # 2 like $thr->error, qr/hello/, __FILE__ . __LINE__; # 3 is $tid_ee{$thr}, undef, __FILE__ . __LINE__; # 4 $test_mode = 1; ok $thr = foo(\&bar, "hello, world!"), __FILE__ . __LINE__; # 5 is $thr->join, undef, __FILE__ . __LINE__; # 6 is $thr->error, undef, __FILE__ . __LINE__; # 7 like $tid_ee{$thr->tid}, qr/hello/, __FILE__ . __LINE__; # 8 ok $thr = foo(\&bar,"goodbye, cruel world!"),__FILE__.__LINE__; # 9 is $thr->join, undef, __FILE__ . __LINE__; # 10 is $thr->error, undef, __FILE__ . __LINE__; # 11 like $tid_ee{$thr->tid}, qr/hello/, __FILE__ . __LINE__; # 12 done_testing; 2020-08-01 18:59:50 dpchrist at tinkywinky ~/sandbox/perl $ perl thread-exception-eval.pl Thread 1 terminated abnormally: hello, world! at thread-exception-eval.pl line 13. ok 1 - thread-exception-eval.pl32 ok 2 - thread-exception-eval.pl33 ok 3 - thread-exception-eval.pl34 ok 4 - thread-exception-eval.pl35 ok 5 - thread-exception-eval.pl39 ok 6 - thread-exception-eval.pl40 ok 7 - thread-exception-eval.pl41 ok 8 - thread-exception-eval.pl42 ok 9 - thread-exception-eval.pl44 ok 10 - thread-exception-eval.pl45 ok 11 - thread-exception-eval.pl46 not ok 12 - thread-exception-eval.pl47 # Failed test 'thread-exception-eval.pl47' # at thread-exception-eval.pl line 47. # 'goodbye, cruel world! at thread-exception-eval.pl line 13. # ' # doesn't match '(?^:hello)' 1..12 # Looks like you failed 1 test of 12. David From not.com at gmail.com Sun Aug 2 09:24:23 2020 From: not.com at gmail.com (yary) Date: Sun, 2 Aug 2020 12:24:23 -0400 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: <83685025-6e5f-47ea-2598-c27db663bd27@holgerdanske.com> References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> <83685025-6e5f-47ea-2598-c27db663bd27@holgerdanske.com> Message-ID: Good idea, to check for expected warnings only. This is reminding me of modules to help test warnings, looks like https://metacpan.org/pod/Test::Warnings is the one to use these days. Wonder what is out there to ease the eval/die testing, maybe https://metacpan.org/pod/Test::Exception ? -y On Sat, Aug 1, 2020 at 10:12 PM David Christensen wrote: > On 2020-08-01 00:10, David Christensen wrote: > > sanfrancisco-pm: > > > sub foo > > { > > if ($test_mode) { > > no warnings 'threads'; > > > > $thr = threads->create( > > sub { die "hello, world!" } > > ); > > } else { > > $thr = threads->create( > > sub { die "hello, world!" } > > ); > > } > > } > > "no warnings 'threads'" seemed overly broad, and was bugging me. > > > So, I came up with another approach -- use an eval-apply design pattern > inside the child thread. The inner code becomes an expression and fits > into a ternary conditional. Child errors are saved into a shared lookup > table. All exception messages should be caught (except those that crash > Perl?). Expected exception messages will pass test cases and unexpected > messages will fail test cases: > > > 2020-08-01 18:59:02 dpchrist at tinkywinky ~/sandbox/perl > $ cat thread-exception-eval.pl > #!perl > > use strict; > use warnings; > use threads; > > use Data::Dumper; > use Test::More; > > our $test_mode; > our %tid_ee :shared; > > sub bar { die @_ }; > > sub foo > { > threads->create( > sub { > my $f = shift; > my $r = $test_mode > ? eval { $f->(@_) } > : $f->(@_); > $tid_ee{threads->tid} = $@; > return $r; > }, > @_ > ); > } > > my $thr; > > ok $thr = foo(\&bar, "hello, world!"), __FILE__ . __LINE__; # 1 > is $thr->join, undef, __FILE__ . __LINE__; # 2 > like $thr->error, qr/hello/, __FILE__ . __LINE__; # 3 > is $tid_ee{$thr}, undef, __FILE__ . __LINE__; # 4 > > $test_mode = 1; > > ok $thr = foo(\&bar, "hello, world!"), __FILE__ . __LINE__; # 5 > is $thr->join, undef, __FILE__ . __LINE__; # 6 > is $thr->error, undef, __FILE__ . __LINE__; # 7 > like $tid_ee{$thr->tid}, qr/hello/, __FILE__ . __LINE__; # 8 > > ok $thr = foo(\&bar,"goodbye, cruel world!"),__FILE__.__LINE__; # 9 > is $thr->join, undef, __FILE__ . __LINE__; # 10 > is $thr->error, undef, __FILE__ . __LINE__; # 11 > like $tid_ee{$thr->tid}, qr/hello/, __FILE__ . __LINE__; # 12 > > done_testing; > > 2020-08-01 18:59:50 dpchrist at tinkywinky ~/sandbox/perl > $ perl thread-exception-eval.pl > Thread 1 terminated abnormally: hello, world! at > thread-exception-eval.pl line 13. > ok 1 - thread-exception-eval.pl32 > ok 2 - thread-exception-eval.pl33 > ok 3 - thread-exception-eval.pl34 > ok 4 - thread-exception-eval.pl35 > ok 5 - thread-exception-eval.pl39 > ok 6 - thread-exception-eval.pl40 > ok 7 - thread-exception-eval.pl41 > ok 8 - thread-exception-eval.pl42 > ok 9 - thread-exception-eval.pl44 > ok 10 - thread-exception-eval.pl45 > ok 11 - thread-exception-eval.pl46 > not ok 12 - thread-exception-eval.pl47 > # Failed test 'thread-exception-eval.pl47' > # at thread-exception-eval.pl line 47. > # 'goodbye, cruel world! at thread-exception-eval.pl > line 13. > # ' > # doesn't match '(?^:hello)' > 1..12 > # Looks like you failed 1 test of 12. > > > David > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > https://mail.pm.org/mailman/listinfo/sanfrancisco-pm > -------------- next part -------------- An HTML attachment was scrubbed... URL: From doomvox at gmail.com Sun Aug 2 14:51:06 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Sun, 2 Aug 2020 14:51:06 -0700 Subject: [sf-perl] more zooming about Raku Message-ID: Joseph Brenner is inviting you to a scheduled Zoom meeting. Topic: Raku aka Perl6 Study Group #2 Time: Aug 2, 2020 03:00 PM Pacific Time (US and Canada) Join Zoom Meeting https://us04web.zoom.us/j/74244162263?pwd=eTQ0TUt5YmxUN3FCVjI0RXhReXhUZz09 Meeting ID: 742 4416 2263 Passcode: 4RakuRoll From doomvox at gmail.com Sun Aug 2 14:53:47 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Sun, 2 Aug 2020 14:53:47 -0700 Subject: [sf-perl] more zooming about Raku In-Reply-To: References: Message-ID: And at 4pm, just in case: https://us04web.zoom.us/j/75254368231?pwd=Q0JwNnB3Mmoyc1I3V3JpV1RnSHRndz09 On 8/2/20, Joseph Brenner wrote: > Joseph Brenner is inviting you to a scheduled Zoom meeting. > > Topic: Raku aka Perl6 Study Group #2 > Time: Aug 2, 2020 03:00 PM Pacific Time (US and Canada) > > Join Zoom Meeting > https://us04web.zoom.us/j/74244162263?pwd=eTQ0TUt5YmxUN3FCVjI0RXhReXhUZz09 > > Meeting ID: 742 4416 2263 > Passcode: 4RakuRoll > From dpchrist at holgerdanske.com Sun Aug 2 16:40:14 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Sun, 2 Aug 2020 16:40:14 -0700 Subject: [sf-perl] conditional "no warnings 'threads'" In-Reply-To: References: <1b4d7da1-75cb-100b-781f-b7feef345728@holgerdanske.com> <83685025-6e5f-47ea-2598-c27db663bd27@holgerdanske.com> Message-ID: <2f0968cc-d616-6495-7d1a-30d93a28fe96@holgerdanske.com> On 2020-08-02 09:24, yary wrote: > This is reminding me of modules to help test warnings, looks like > https://metacpan.org/pod/Test::Warnings is the one to use these days. > > Wonder what is out there to ease the eval/die testing, maybe > https://metacpan.org/pod/Test::Exception ? Please "reply to list". Yes, I tried both. They do not seem to be designed for test scripts running in the main thread and the unit under test (UUT) running in a different thread. I thought about moving the test scripts into the same thread as the UUT, or vice-versa. Some test cases can be done entirely in the main thread, so I did that. But other test cases are testing multi-threaded behavior, so I needed new ideas. threads::error() provides the child exception message to the test script, so I could test my UUT exceptions. But, the exception messages were leaking to the console. The conditional "no warnings 'threads'" was a hack to stop the leaks. The subsequent eval-apply idea is better. (It should probably be called "eval-catch".) For warnings, I implemented a shim function. threads::create() calls the shim. The shim installs a $SIG{__WARN__} handler and calls the child entry function. The handler saves any child warning messages into a shared variable. The test script examines the shared variable. I am now adding the eval-catch idea to the shim. I also plan to change the shim from fixed handlers and shared variables to callbacks. David From dean at fragfest.com.au Wed Aug 5 13:32:49 2020 From: dean at fragfest.com.au (Dean Hamstead) Date: Wed, 05 Aug 2020 13:32:49 -0700 Subject: [sf-perl] Survey: Marketing and branding for The Perl Foundation (TPF) Message-ID: <7201e552f06e00a5d29ce0fdccb694b2@fragfest.com.au> Hey Everyone The Marketing Committee of TPF would like to understand more about your perception of "The Perl Foundation"[1] itself (rather than Perl the language) and has posted a survey. If you are not programming Perl or Raku anymore, your input is still welcomed. If you have not familiar with The Perl Foundation, please fill out the survey accordingly. And in all cases, you're welcome to fill out the "Other" field if another response doesn't suit. Here is the link: https://docs.google.com/forms/d/e/1FAIpQLSdGwTCV8TIELW1tYkYv2Sl-z7uSCthXB0XfN2TGTrQftCz2Kw/viewform Please forward to your colleagues, friends, etc. Cheers, Dean 1. https://www.perlfoundation.org/ From doomvox at gmail.com Sat Aug 8 16:20:41 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Sat, 8 Aug 2020 16:20:41 -0700 Subject: [sf-perl] Raku study group, Sunday Aug 8nd, 2pm Message-ID: And once again, the creature from the Raku study group emerges: Sunday August 09th at 2pm, via zoom. RSVP to: https://www.meetup.com/San-Francisco-Perl/events/271993517/ zoom link, 2pm: https://us04web.zoom.us/j/72909473784?pwd=YTd1ZnlWTFV3ckZMWmtRcXdPK2loZz09 From dpchrist at holgerdanske.com Tue Aug 11 16:55:14 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Tue, 11 Aug 2020 16:55:14 -0700 Subject: [sf-perl] Perl references to arrays vs. references to shared arrays Message-ID: sanfrancisco-pm: I have a computer: 2020-08-11 16:02:50 dpchrist at tinkywinky ~/sandbox/perl $ cat /etc/debian_version ; uname -a ; perl -V | head -n 1 9.13 Linux tinkywinky 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1+deb9u1 (2020-06-07) x86_64 GNU/Linux Summary of my perl5 (revision 5 version 24 subversion 1) configuration: I have been working with nested data structures. Some data structures can contain loops -- e.g. a data structure that contains a reference to itself, a data structure that contains a reference to another data structure that refers to the first data structure, etc. To detect circular loops, I need a way to uniquely identify each data structure. I have noted that if I stringify a reference to a data structure, the result appears to be the type and a hexadecimal memory address. For example: 2020-08-11 16:09:21 dpchrist at tinkywinky ~/sandbox/perl $ perl -e 'my @a; print \@a, "\n"' ARRAY(0x55d9a7410be0) This also works if another data structure contains a reference to the first: 2020-08-11 16:35:31 dpchrist at tinkywinky ~/sandbox/perl $ perl -e 'my (@a, @b); print \@a, "\n"; $b[0] = \@a; print $b[0], "\n"' ARRAY(0x55b10cedbc10) ARRAY(0x55b10cedbc10) But the technique fails for data structures built from shared variables. It appears that Perl is copying and/or moving shared arrays, hashes, etc., whenever their references are accessed (read): 2020-08-11 16:18:39 dpchrist at tinkywinky ~/sandbox/perl $ cat circular-arrayref-vs-shared-arrayref.pl #!perl use strict; use warnings; use threads; use threads::shared; my @a0; my @a1; my @sa0 :shared; my @sa1 :shared; sub d { no warnings 'uninitialized'; printf "%i %s=[%21s] %s=[%21s]\n", (caller)[2], \@a0, $a0[0], \@a1, $a1[0]; } sub e { no warnings 'uninitialized'; printf "%i %s=[%21s] %s=[%21s]\n", (caller)[2], \@sa0, $sa0[0], \@sa1, $sa1[0]; } print "\nArrays with circular references:\n"; d; d; d; $a0[0] = \@a1; d; d; d; $a1[0] = \@a0; d; d; d; print "\nShared arrays with circular references:\n"; e; e; e; $sa0[0] = \@sa1; e; e; e; $sa1[0] = \@sa0; e; e; e; 2020-08-11 16:18:42 dpchrist at tinkywinky ~/sandbox/perl $ perl circular-arrayref-vs-shared-arrayref.pl Arrays with circular references: 27 ARRAY(0x5569415e7df8)=[ ] ARRAY(0x5569415e7d80)=[ ] 27 ARRAY(0x5569415e7df8)=[ ] ARRAY(0x5569415e7d80)=[ ] 27 ARRAY(0x5569415e7df8)=[ ] ARRAY(0x5569415e7d80)=[ ] 28 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ ] 28 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ ] 28 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ ] 29 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ARRAY(0x5569415e7df8)] 29 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ARRAY(0x5569415e7df8)] 29 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ARRAY(0x5569415e7df8)] Shared arrays with circular references: 32 ARRAY(0x5569415e7de0)=[ ] ARRAY(0x5569415e7e70)=[ ] 32 ARRAY(0x5569415e7de0)=[ ] ARRAY(0x5569415e7e70)=[ ] 32 ARRAY(0x5569415e7de0)=[ ] ARRAY(0x5569415e7e70)=[ ] 33 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de0d8)] ARRAY(0x5569415e7e70)=[ ] 33 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de048)] ARRAY(0x5569415e7e70)=[ ] 33 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416a00c0)] ARRAY(0x5569415e7e70)=[ ] 34 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de048)] ARRAY(0x5569415e7e70)=[ARRAY(0x556941690c40)] 34 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416a00c0)] ARRAY(0x5569415e7e70)=[ARRAY(0x556941690c58)] 34 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de048)] ARRAY(0x5569415e7e70)=[ARRAY(0x556941690c88)] For the non-shared arrays, the stringified references are unchanging and match up -- e.g. both \@a0 and $a1[0] stringify to ARRAY(0x5569415e7df8), similarly so for \@a1 and $a0[0]. But the stringified references for shared types do not match, and the references in another data structure change -- \@sa0 stringifies to ARRAY(0x5569415e7de0) every time, but what should be the same reference in $sa1[0] stringifies to ARRAY(0x556941690c40, ARRAY(0x556941690c58, and ARRAY(0x556941690c88 (!). Similarly so for \@sa1 and $sa0[0]. Consequently, loop detection fails and my code falls into an infinite loop when walking such data structures. Comments or suggestions? David From doomvox at gmail.com Thu Aug 13 14:01:01 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Thu, 13 Aug 2020 14:01:01 -0700 Subject: [sf-perl] Perl references to arrays vs. references to shared arrays In-Reply-To: References: Message-ID: Well, the result you've found is pretty much what I would've expected from other things I've heard... For example, back when people were experimenting a lot with "inside out objects", which use the stringified form of a scalar ref as an object ID, the word was that this had problems if you were trying to use threads. That was supposed to be a problem with Damien Conway's "Class::Std", for example. I see that Class::InsideOut and Object::InsideOut both claim to be threadsafe: https://metacpan.org/pod/Class::InsideOut https://metacpan.org/pod/distribution/Object-InsideOut/lib/Object/InsideOut.pod#THREAD-SUPPORT# You might take a look under the hood there to see how they manage it... I would guess if you're rolling your own object system it's relatively easy to deal, you'd just need your own system of unique IDs for each object. I would think you could do pretty well with just a probablistic solution where collisions are extremely unlikely, like combining a memory location, the current time in seconds, and a "random" number. Alternately, if you have some sort of central data store for node ids, you could check for collisions when you create them, but then you need to worry about how you're going to handle race-conditions. (One reason I like relational databases is that most headaches like these have been handled already by someone else.) But this all depends on being willing to munge your data-structure, and store a node Id in them somewhere. If you didn't want to go there, it occurs to me that if you're just trying to detect circular references you could check many times (1000? More?) and call it circular if you find a loop just once. Oddities with threads might cause a detection failure *some* times, but I don't think they'd do so consistently, would they? (Interestingly, Conway's more recent attempt Dios doesn't seem to say anything about thread support: https://metacpan.org/pod/Dios). On 8/11/20, David Christensen wrote: > sanfrancisco-pm: > > I have a computer: > > 2020-08-11 16:02:50 dpchrist at tinkywinky ~/sandbox/perl > $ cat /etc/debian_version ; uname -a ; perl -V | head -n 1 > 9.13 > Linux tinkywinky 4.9.0-12-amd64 #1 SMP Debian 4.9.210-1+deb9u1 > (2020-06-07) x86_64 GNU/Linux > Summary of my perl5 (revision 5 version 24 subversion 1) configuration: > > > I have been working with nested data structures. Some data structures > can contain loops -- e.g. a data structure that contains a reference to > itself, a data structure that contains a reference to another data > structure that refers to the first data structure, etc. > > > To detect circular loops, I need a way to uniquely identify each data > structure. I have noted that if I stringify a reference to a data > structure, the result appears to be the type and a hexadecimal memory > address. For example: > > 2020-08-11 16:09:21 dpchrist at tinkywinky ~/sandbox/perl > $ perl -e 'my @a; print \@a, "\n"' > ARRAY(0x55d9a7410be0) > > > This also works if another data structure contains a reference to the > first: > > 2020-08-11 16:35:31 dpchrist at tinkywinky ~/sandbox/perl > $ perl -e 'my (@a, @b); print \@a, "\n"; $b[0] = \@a; print $b[0], "\n"' > ARRAY(0x55b10cedbc10) > ARRAY(0x55b10cedbc10) > > > But the technique fails for data structures built from shared variables. > It appears that Perl is copying and/or moving shared arrays, hashes, > etc., whenever their references are accessed (read): > > 2020-08-11 16:18:39 dpchrist at tinkywinky ~/sandbox/perl > $ cat circular-arrayref-vs-shared-arrayref.pl > #!perl > > use strict; > use warnings; > use threads; > use threads::shared; > > my @a0; > my @a1; > > my @sa0 :shared; > my @sa1 :shared; > > sub d { > no warnings 'uninitialized'; > printf "%i %s=[%21s] %s=[%21s]\n", > (caller)[2], \@a0, $a0[0], \@a1, $a1[0]; > } > > sub e { > no warnings 'uninitialized'; > printf "%i %s=[%21s] %s=[%21s]\n", > (caller)[2], \@sa0, $sa0[0], \@sa1, $sa1[0]; > } > > print "\nArrays with circular references:\n"; > d; d; d; > $a0[0] = \@a1; d; d; d; > $a1[0] = \@a0; d; d; d; > > print "\nShared arrays with circular references:\n"; > e; e; e; > $sa0[0] = \@sa1; e; e; e; > $sa1[0] = \@sa0; e; e; e; > > 2020-08-11 16:18:42 dpchrist at tinkywinky ~/sandbox/perl > $ perl circular-arrayref-vs-shared-arrayref.pl > > Arrays with circular references: > 27 ARRAY(0x5569415e7df8)=[ ] ARRAY(0x5569415e7d80)=[ > ] > 27 ARRAY(0x5569415e7df8)=[ ] ARRAY(0x5569415e7d80)=[ > ] > 27 ARRAY(0x5569415e7df8)=[ ] ARRAY(0x5569415e7d80)=[ > ] > 28 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ > ] > 28 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ > ] > 28 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] ARRAY(0x5569415e7d80)=[ > ] > 29 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] > ARRAY(0x5569415e7d80)=[ARRAY(0x5569415e7df8)] > 29 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] > ARRAY(0x5569415e7d80)=[ARRAY(0x5569415e7df8)] > 29 ARRAY(0x5569415e7df8)=[ARRAY(0x5569415e7d80)] > ARRAY(0x5569415e7d80)=[ARRAY(0x5569415e7df8)] > > Shared arrays with circular references: > 32 ARRAY(0x5569415e7de0)=[ ] ARRAY(0x5569415e7e70)=[ > ] > 32 ARRAY(0x5569415e7de0)=[ ] ARRAY(0x5569415e7e70)=[ > ] > 32 ARRAY(0x5569415e7de0)=[ ] ARRAY(0x5569415e7e70)=[ > ] > 33 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de0d8)] ARRAY(0x5569415e7e70)=[ > ] > 33 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de048)] ARRAY(0x5569415e7e70)=[ > ] > 33 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416a00c0)] ARRAY(0x5569415e7e70)=[ > ] > 34 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de048)] > ARRAY(0x5569415e7e70)=[ARRAY(0x556941690c40)] > 34 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416a00c0)] > ARRAY(0x5569415e7e70)=[ARRAY(0x556941690c58)] > 34 ARRAY(0x5569415e7de0)=[ARRAY(0x5569416de048)] > ARRAY(0x5569415e7e70)=[ARRAY(0x556941690c88)] > > > For the non-shared arrays, the stringified references are unchanging and > match up -- e.g. both \@a0 and $a1[0] stringify to > ARRAY(0x5569415e7df8), similarly so for \@a1 and $a0[0]. > > > But the stringified references for shared types do not match, and the > references in another data structure change -- \@sa0 stringifies to > ARRAY(0x5569415e7de0) every time, but what should be the same reference > in $sa1[0] stringifies to ARRAY(0x556941690c40, ARRAY(0x556941690c58, > and ARRAY(0x556941690c88 (!). Similarly so for \@sa1 and $sa0[0]. > Consequently, loop detection fails and my code falls into an infinite > loop when walking such data structures. > > > Comments or suggestions? > > > David > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > https://mail.pm.org/mailman/listinfo/sanfrancisco-pm > From dpchrist at holgerdanske.com Thu Aug 13 18:05:47 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Thu, 13 Aug 2020 18:05:47 -0700 Subject: [sf-perl] Perl references to arrays vs. references to shared arrays In-Reply-To: References: Message-ID: On 2020-08-11 16:55, David Christensen wrote: > I have been working with nested data structures. > To detect circular loops ... stringify a reference > But the technique fails for data structures built from shared variables. The solution is to use shared::threads::is_shared: https://metacpan.org/pod/threads::shared In the example below, I used Scalar::Util::refaddr for consistency: 2020-08-13 18:00:18 dpchrist at tinkywinky ~/sandbox/perl $ cat circular-arrayref-vs-shared-arrayref.pl #!perl use strict; use warnings; use threads; use threads::shared; use Scalar::Util qw( refaddr ); my @a0; my @a1; my @sa0 :shared; my @sa1 :shared; sub d { no warnings 'uninitialized'; printf "%i %s=[%21s] %s=[%21s]\n", (caller)[2], refaddr(\@a0), refaddr($a0[0]), refaddr(\@a1), refaddr($a1[0]); } sub e { no warnings 'uninitialized'; printf "%i %s=[%21s] %s=[%21s]\n", (caller)[2], is_shared(@sa0), is_shared($sa0[0]), is_shared(@sa1), is_shared($sa1[0]); } print "\nArrays with circular references:\n"; d; d; d; $a0[0] = \@a1; d; d; d; $a1[0] = \@a0; d; d; d; print "\nShared arrays with circular references:\n"; e; e; e; $sa0[0] = \@sa1; e; e; e; $sa1[0] = \@sa0; e; e; e; 2020-08-13 18:00:22 dpchrist at tinkywinky ~/sandbox/perl $ perl circular-arrayref-vs-shared-arrayref.pl Arrays with circular references: 33 93884874649056=[ ] 93884874649128=[ ] 33 93884874649056=[ ] 93884874649128=[ ] 33 93884874649056=[ ] 93884874649128=[ ] 34 93884874649056=[ 93884874649128] 93884874649128=[ ] 34 93884874649056=[ 93884874649128] 93884874649128=[ ] 34 93884874649056=[ 93884874649128] 93884874649128=[ ] 35 93884874649056=[ 93884874649128] 93884874649128=[ 93884874649056] 35 93884874649056=[ 93884874649128] 93884874649128=[ 93884874649056] 35 93884874649056=[ 93884874649128] 93884874649128=[ 93884874649056] Shared arrays with circular references: 38 93884875574272=[ ] 93884875574296=[ ] 38 93884875574272=[ ] 93884875574296=[ ] 38 93884875574272=[ ] 93884875574296=[ ] 39 93884875574272=[ 93884875574296] 93884875574296=[ ] 39 93884875574272=[ 93884875574296] 93884875574296=[ ] 39 93884875574272=[ 93884875574296] 93884875574296=[ ] 40 93884875574272=[ 93884875574296] 93884875574296=[ 93884875574272] 40 93884875574272=[ 93884875574296] 93884875574296=[ 93884875574272] 40 93884875574272=[ 93884875574296] 93884875574296=[ 93884875574272] David From dpchrist at holgerdanske.com Thu Aug 13 18:53:43 2020 From: dpchrist at holgerdanske.com (David Christensen) Date: Thu, 13 Aug 2020 18:53:43 -0700 Subject: [sf-perl] Perl references to arrays vs. references to shared arrays In-Reply-To: References: Message-ID: On 2020-08-13 14:01, Joseph Brenner wrote: > Well, the result you've found is pretty much what I would've expected > from other things I've heard... Thanks for the reply. :-) I pondered some of those ideas. Thankfully, I was RTFM threads:shared on a related issue and found a solution. David From doomvox at gmail.com Fri Aug 14 09:26:58 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Fri, 14 Aug 2020 09:26:58 -0700 Subject: [sf-perl] Perl references to arrays vs. references to shared arrays In-Reply-To: References: Message-ID: David Christensen wrote: > The solution is to use shared::threads::is_shared: > https://metacpan.org/pod/threads::shared Ah, very cool, hadn't heard about that trick. From doomvox at gmail.com Fri Aug 14 10:21:49 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Fri, 14 Aug 2020 10:21:49 -0700 Subject: [sf-perl] The Raku Study Group, at 1pm this time, on Sunday the 16th Message-ID: "The world is full of magical things patiently waiting for our wits to grow sharper." [1] Time for another Raku study group: https://us02web.zoom.us/j/86928085691?pwd=bWZ5TzNWbFlTaFpOWVloU3NXUEIrdz09 Password: 4RakuRoll Note: we're experimenting with an earlier start time, 1pm PST, to make things a little easier for people in europe. RSVP, if you're so inclined: https://www.meetup.com/San-Francisco-Perl/events/272577658/ [1] Attributed to Bertrand Russell at https://www.success.com/21-of-the-most-inspirational-quotes/ Probably a paraphrase of Eden Phillpotts, "A Shadow Passes" (1919): https://quoteinvestigator.com/2012/07/07/magical-things-waiting/ From doomvox at gmail.com Tue Aug 18 14:38:22 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Tue, 18 Aug 2020 14:38:22 -0700 Subject: [sf-perl] SF Perl's Raku Study Group: Sunday 1pm PST Message-ID: Yeaning for the ancient heavenly connection to the starry dynamo of night, it's the Raku study group: https://us02web.zoom.us/j/85864767082?pwd=TW94dG8zR2tHWEl3ZVdvdmVyYkJkUT09 Password: 4RakuRoll. Note: we're using an earlier start time now, 1pm PST, to make things a little easier for people in Europe (e.g. that's 10pm in Berlin). RSVP if you're so inclined: https://www.meetup.com/San-Francisco-Perl/events/272661690/ From doomvox at gmail.com Fri Aug 28 00:20:35 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Fri, 28 Aug 2020 00:20:35 -0700 Subject: [sf-perl] perl6-users@perl.org, sanfrancisco-pm@pm.org Message-ID: Deep into that darkness peering, long I stood there, wondering, fearing, doubting, dreaming dreams of the Raku Study Group. https://us02web.zoom.us/j/88495193366?pwd=TXpMSlVqaVVGMm52SWlvSmRrZXFBUT09 Password: 4RakuRoll Note: we're still using that earlier start time: 1pm in California. This makes things a little easier for people in Europe (that start time is 10pm in Berlin). RSVPs are helpful (though not required): https://www.meetup.com/San-Francisco-Perl/events/272865558/ From doomvox at gmail.com Sun Aug 30 13:43:16 2020 From: doomvox at gmail.com (Joseph Brenner) Date: Sun, 30 Aug 2020 13:43:16 -0700 Subject: [sf-perl] Raku Study group in progress Message-ID: I'm trying to get the Raku study group working today, but I've been having a bunch of zoom weirdness. It should be in progress now: The SF Perl Raku Study Group, 8/30 at 1pm PDT https://us02web.zoom.us/j/88495193366?pwd=TXpMSlVqaVVGMm52SWlvSmRrZXFBUT09 Password: 4RakuRoll