in reply to One piece of code, two mysteries! (UPDATED.)

These 2 lines confuse me

kill 0, $pid while sleep 1 and $timeout--; kill 3, $pid if $timeout;
What are you trying to do here? It appears, that you repeat sleep(1) until $timeout is 0. In this case, the second line does nothing, so your thread is not terminated. Probably you wanted to have
sleep 1 while kill(0, $pid) && $timeout--; kill 3, $pid if $timeout;

Could it be, that running thread messes up the array?

Replies are listed 'Best First'.
Re^2: One piece of code, two mysteries!
by BrowserUk (Patriarch) on Oct 05, 2012 at 07:43 UTC

    Well spotted, you're not wrong.

    That comes about because this is an as yet incomplete modification of an old subroutine with different goals. The bugs I encountered meant that I haven't gotten around to trying finishing the modifications.

    But that has nothing to do with the error, as they are reproduced by this simplification:

    #! perl -slw use strict; use threads; use threads::shared; sub test { my @results :shared; async { @results = 1 .. 10; }->join; print "@results"; return @results; } print test(); __END__ C:\test>junk50 1 2 3 4 5 6 7 8 9 10 Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16. Use of uninitialized value in print at C:\test\junk50.pl line 16.

    I didn't switch to this as my example because I could not reproduce the circumstances of the "modification of a readonly value" with this.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    RIP Neil Armstrong