Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight

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

Replies are listed 'Best First'.
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

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 Anonymous Monk on Oct 05, 2012 at 06:37 UTC
    bah, nevermind, ignore me

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://997393]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (13)
As of 2017-07-24 14:48 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (354 votes). Check out past polls.