in reply to [substr] anomaly or mine?

I think that's what they would term an undefined behaviour of the function. In other words, you should use it as an lvalue, or as an rvalue, but not as both at the same time.

Replies are listed 'Best First'.
Re: Re: [substr] anomaly or mine?
by BrowserUk (Patriarch) on Aug 20, 2002 at 00:01 UTC

    Um...If I strip away the coments and the output you'll see that I am only using it as an lvalue or an rvalue I think?

    print substr($s,0,4,''),$s # rvalue?

    print substr($s,0,4)='',$s # lvalue?


    What's this about a "crooked mitre"? I'm good at woodwork!
      In the first case, this is a pure rvalue usage. In the second case, due to the assignment, you're using it as an lvalue, but then, due to the print, turing the resulting expression back into an rvalue. This double conversion seems to be the root of your problems.

      I was expecting it to return '', since that's what the assignment operator usually does. As soon as you introduce the lvalue-function angle, I think you're playing with fire.

        Updated: to correct brainfart!

        Actually, I didn't see it that way and was about to suggest that nobody would think twice about using a slice as an rvalue in a list context...but decided to try it first...and waddayaknow...

        0.04 0.02 >@a = qw(a b c d e) 0.04 0.02 >print "@a", $/ a b c d e 0.04 0.02 >@a[1..3] = qw(x y z) 0.04 0.02 >print "@a", $/ a x y z e 0.04 0.02 >print @a[1..3] = qw(p q r) p q r 0.04 0.02 >print "@a", $/ a p q r e

        So, once I got the syntax right, a slice in a list context does work pretty much as you would expect. It does the assignment and then, returns the value assigned.


        What's this about a "crooked mitre"? I'm good at woodwork!