Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: Scalar range operator again

by Anonymous Monk
on Jul 06, 2012 at 12:37 UTC ( #980252=note: print w/ replies, xml ) Need Help??

Comment on Re: Scalar range operator again
Re^2: Scalar range operator again
by kejv2 (Novice) on Jul 06, 2012 at 18:33 UTC
    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.
      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.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (10)
As of 2014-10-22 00:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (112 votes), past polls