You have indeed, as dws explained so well. A nice tool for situations like these, where you suspect perl might parse your code differently then you want it to, is B::Deparse, which shows you exactly what perl thinks your code is saying. In this case, using it looks somthing like this:

C:\WINDOWS\Desktop>perl -c -MO=Deparse,-p -e "$history{$_} ? splice(@h +istory,$i--,1) : $history{$_}=1;" Can't modify splice in scalar assignment at -e line 1, near "1;" -e had compilation errors. (($history{$_} ? splice(@history, ($i--), 1) : $history{$_}) = 1);

In this case, I want perl to try to compile without running (-c), using the O module (the compiler-front end; for technical reasons (read: reasons I don't recall) Deparse is considered a compiler), passing it the Deparse (tells it to use B::Deparse, and pass it the rest as parameters), and -p (tells deparse to give me lots of parenthesies). For more info on using B::Deparse, follow any of those links; there's also options to not munge various things to give you a look that's closer to perl's, but harder to read.

Deparse is very useful for deobfuscating obfuscations, both intentional and otherwise. Oh, and it's core in 5.6 and later, IIRC. (For some reason, the CPAN results disagree with me, and say 5.8, which can't be right, since I have it and am on 5.6. Strange...)


Confession: It does an Immortal Body good.


In reply to Re: Ternary Operator: Condition-Negation by theorbtwo
in thread Ternary Operator: Condition-Negation by PetaMem

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.