Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re^2: Scalar range operator again

by kejv2 (Novice)
on Jul 06, 2012 at 18:33 UTC ( #980352=note: print w/ replies, xml ) Need Help??


in reply to Re: Scalar range operator again
in thread Scalar range operator again

Yes, I have read all those articles on the internet. But nowhere was described this counterintuitive behaviour. Of course, they point out that perl -we'my @l = qw/ac qw/; for (@l) { print if /a/../c/ }' would print ac and the same only with three dots prints acqw. This is completely understandable but not the case with @l = qw/ca qw/. Maybe it's really better to avoid such constructs as other monk has said.


Comment on Re^2: Scalar range operator again
Select or Download Code
Re^3: Scalar range operator again
by dsheroh (Parson) on Jul 07, 2012 at 08:08 UTC
    I have read all those articles on the internet. But nowhere was described this counterintuitive behaviour.
    Maybe it's just me, but perldoc's "It can test the right operand and become false on the same evaluation it became true (as in awk), but it still returns true once." seems to describe exactly this behavior. I'd even call it a clear description.
    they point out that perl -we'my @l = qw/ac qw/; for (@l) { print if /a/../c/ }' would print ac and the same only with three dots prints acqw. This is completely understandable but not the case with @l = qw/ca qw/.
    I don't get what you mean here. qw/ac qw/ and qw/ca qw/ are treated identically by the flip-flop operator:
    $ perl -E 'my @l = qw/ac qw/; for (@l) { say if /a/../c/ }' ac $ perl -E 'my @l = qw/ca qw/; for (@l) { say if /a/../c/ }' ca
      I don't get what you mean here. qw/ac qw/ and qw/ca qw/ are treated identically by the flip-flop operator:

      Yes, I know that. Also the description on perldoc seems clear if you already know what to expect. My whole point is that the result of perl -we'my @l = qw/ca qw/; for (@l) { print if /a/../c/ }' is not logical.

      Suppose that I want to process html file where I have tags like this:

      <tag> a </tag><tag> b </tag><tag> c
      If my flip-flop condition is /<tag>/../<\/tag>/ it would print
      <tag> a </tag><tag> </tag><tag>
      which is not what you want. With three dots you get
      <tag> a </tag><tag> </tag><tag> c </tag>
      still not good :(

      Basically, what I originally (and incorrectly as I see now) expected from this operator was that it processes each element char by char (as a real flip-flop) and not as a whole. Of course, in my html example I can first format the file but that is another story.

      BTW: I am new here and have a question about writeup formatting. How do you cite someone's text if it contains a code? Copy-pasting and than manually putting those code tags back (which I did) seems pretty tedious.

        BTW: I am new here and have a question about writeup formatting. How do you cite someone's text if it contains a code? Copy-pasting and than manually putting those code tags back (which I did) seems pretty tedious.

        If you have the latest firefox,
        select the text, right context menu, View selection source
        then paste into your textbox where you have a convenient template of

        <blockquote><i> quoted </i></blockquote> <p> response </p>

        or
        <p><i> quoted </i></p> <p> response </p>

        or
        <dl> <dt><p> quoted </p></dt> <dd> response </dd> </dl>

        Sure, it will no longer be download-able code but no matter

        The alternative is to use the xml link ( ?displaytype=xml;node_id=980252 ) and copy/paste from the original

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (9)
As of 2014-11-28 12:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (196 votes), past polls