Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: One piece of code, two mysteries!

by Anonymous Monk
on Oct 05, 2012 at 06:33 UTC ( #997393=note: print w/ replies, xml ) Need Help??

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

I get the same thing, but then, after checking perldoc threads |ack async -C12 I see

async BLOCK; "async" creates a thread to execute the block immediately followin +g it. This block is treated as an anonymous subroutine, and so must have a semicolon after the closing brace. Like "threads->create()" +, "async" returns a *threads* object. $thr->error() Threads are executed in an "eval" context. This method will return "undef" if the thread terminates *normally*. Otherwise, it returns the value of $@ associated with the thread's execution status in i +ts "eval" context.

eval? eval returns undef on failure, so I write

print timedCommand( 3, $cmd, $_ ) || "\$@ $@" for 2, 3, 4; ### LINE B +###
and I get
$ perl huh 1 2 2 1 2 3 3 1 2 3 4 4

Comment on Re: One piece of code, two mysteries!
Select or Download Code
Re^2: One piece of code, two mysteries!
by Anonymous Monk on Oct 05, 2012 at 06:37 UTC
    bah, nevermind, ignore me
Re^2: One piece of code, two mysteries!
by Anonymous Monk on Oct 05, 2012 at 06:46 UTC
    ok, second take, this returns something right
    print "@input"; ### LINE A ### return my @foo = @input;

    1 2 1 2 1 2 3 1 2 3 1 2 3 4 1 2 3 4

    i say its a bug in threads::shared, its undefing when it shouldn't

    threads: 1.86 threads::shared: 1.4 C:\perl\5.14.1\bin\MSWin32-x86-multi-thread\perl.exe
Re^2: One piece of code, two mysteries!
by BrowserUk (Pope) on Oct 05, 2012 at 06:57 UTC

    That's not too useful. By adding || "\$@ $@", you're putting the call to timedCommand() in a scalar context.

    Hence, the extra digit you are seeing output is from the return @input in a scalar context and thus is just a count of the number of undefs it contains.

    You aren't seeing anything at all from the "\$@ $@" bit -- note: no "$@" in the output.

    That might just as well be timedCommand( ... ) ||'' for all the additional information it yields.

    The question remains, what happened to the contents of @input; and the answer appears to be: a bug caused it to disappear; which has been fixed if 5.16.

    Something I will have to wait until later to verify here.

    I'm actually most intrigued by the "modification of a readonly variable" message at this point.

    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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://997393]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (9)
As of 2015-07-01 02:22 GMT
Find Nodes?
    Voting Booth?

    What kind of chocolate gives you the most pleasure?

    Results (805 votes), past polls