P is for Practical PerlMonks

Re: Scalar range operator again

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

in reply to Scalar range operator again

Replies are listed 'Best First'.
Re^2: Scalar range operator again
by kejv2 (Acolyte) 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.

Create A New User
Node Status?
node history
Node Type: note [id://980252]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2017-12-16 00:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
What programming language do you hate the most?

Results (446 votes). Check out past polls.

Notices?