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

Re: Re: How's your Perl?

by xmath (Hermit)
on Oct 27, 2003 at 10:31 UTC ( [id://302368]=note: print w/replies, xml ) Need Help??


in reply to Re: How's your Perl?
in thread How's your Perl?

1. yes

2. no and yes (perl treats while1 as one identifier)

3a. yes

8a. yes, cool, unexpected solution :-)   our official version uses a much much more obscure trick.. funny we never saw this one
Try this instead: eval(q[$$foo]) ne eval(q["$$foo"])
•Update: actually, no, the original was fine too.. even though $$foo and $$foo + 0 print differently, they don't compare numerically unequal, which is what the exercise was

11. doesn't appear to work for me..

% perl -e 'sub STDOUT{\*STDOUT} <STDOUT> eq <+STDOUT> or die' Died at -e line 1.

12. yes, but why? :-)

•Update: fixed the "try this".. initially said "!=" instead of "ne"

Replies are listed 'Best First'.
Re: Re: Re: How's your Perl?
by BrowserUk (Patriarch) on Oct 28, 2003 at 02:30 UTC
    12. yes, but why? :-)

    I missed this before.

    For the same reason that these give a similar error

    D:\TEMP>perl -e"sub f{'fred'} goto +f" Can't find label SCALAR(0x15d7c1c) at -e line 1. D:\TEMP>perl -e"sub f{'fred'} goto(f)" Can't find label SCALAR(0x15d7c1c) at -e line 1. D:\TEMP>perl -e"sub f{'fred'} goto f->()" Can't find label SCALAR(0x15d7c1c) at -e line 1.

    But these do not ;^)

    D:\TEMP>perl -e"sub f{'fred'} goto ~~f" Can't find label fred at -e line 1. D:\TEMP>perl -e"sub f{'fred'} goto ''.f" Can't find label fred at -e line 1. D:\TEMP>perl -e"sub f{'fred'} goto scalar f" Can't find label fred at -e line 1. D:\TEMP>perl -e"sub f{'fred'} goto ${\f}" Can't find label fred at -e line 1.

    Examine what is said, not who speaks.
    "Efficiency is intelligent laziness." -David Dunham
    "Think for yourself!" - Abigail
    Hooray!

      For the same reason that these give a similar error

      Yes but why ?   :-)

      Juerd found this one originally, and while it was obviously a parser bug, it initially puzzled us how it managed to produce that reference. (Because it takes a walk through the perl source code to truly understand the issue, I made it a bonus exercise instead of a regular one)

        I will finally admit :) that whilst I think I know the When and the Where, I haven't a clue as to the Why!

        P:\test>perl -MO=Concise -e"sub f{}; goto +f" b <@> leave[t1] vKP/REFC ->(end) 3 <0> enter ->4 4 <;> nextstate(main 2 -e:1) v ->5 a <1> goto vKS/1 ->b 9 <1> refgen sK/1 ->a ## <<<HERE. - <1> ex-list lKRM ->9 5 <0> pushmark sRM ->6 8 <1> entersub[t2] lKRMS/NO(),TARG,INARGS,1 ->9 - <1> ex-list lK ->8 6 <0> pushmark s ->7 - <1> ex-rv2cv sK/129 ->- 7 <#> gv s ->8 -e syntax OK

        Even wading through pp_goto, I couldn't quite work out why it only happens if the function is called in a list context, or indeed why it takes a reference at all. Gut feel tells me its something to do with the fact that the code tries for the goto SUB; variation prior to the goto -LABEL and goto -EXPR variations, and that something is being stacked and not cleaned up, but that's about as far as I got before my brain went into overload.

        One good thing came out of it. I now have a much better appreciation of why goto \&func is so gaddamn slow. All that chundering around unwinding stack frames, validating the target isn't a prohibited one etc. I never imagined. I'd always invisioned a simple longjump().


        Examine what is said, not who speaks.
        "Efficiency is intelligent laziness." -David Dunham
        "Think for yourself!" - Abigail
        Hooray!

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-25 05:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found