Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

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
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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2015-09-04 21:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred temperature scale is:










    Results (148 votes), past polls