http://www.perlmonks.org?node_id=927940


in reply to Can't start threads inside a BEGIN{} block

Buggy version of Perl or threads?

$ perl -E' BEGIN { use threads; async { say "foo"; } ->join for 1..3; } ' foo foo foo

Replies are listed 'Best First'.
Re^2: Can't start threads inside a BEGIN{} block
by ikegami (Patriarch) on Sep 26, 2011 at 20:21 UTC

    No, that's not it. Your problem has nothing to do with thread.

    Use «use strict; use warnings;»!!! $num_threads is undef when you execute the BEGIN block.

    1. The file is compiled.
      1. my $num_threads = 2; is compiled.
      2. my $thr = []; is compiled.
      3. BEGIN { ... } is compiled.
        1. ...
        2. for (my $ii=0; $ii<$num_threads; $ii++) { is compiled.
        3. ...
      4. BEGIN { ... } is executed.
        1. ...
        2. for (my $ii=0; $ii<$num_threads; $ii++) { is executed.
        3. ...
      5. print "done\n"; is compiled.
    2. The file is executed.
      1. my $num_threads = 2; is executed.
      2. my $thr = []; is executed.
      3. print "done\n"; is executed.
      Duh! Thx.