in reply to Re^8: Reference of constants and literals
in thread Reference of constants and literals

(Upd: I didn't take into account that \1 is a constant itself. Please ignore this post )

anyway I think it's a notable result of this discussion that the location of constants and literals will not be fixed at compiletime!

That's not true. Constants are allocated once at compile time.

for (1..3) { print(\1, "\n"); push @x, 'x'; # Prevent reuse of memory addresses. }
SCALAR(0x236d94) SCALAR(0x236d94) SCALAR(0x236d94)

They are tied to the opcode, and the same constant is returned every time.

PP(pp_const) { dVAR; dSP; XPUSHs(cSVOP_sv); RETURN; }

If you see otherwise, it's because you're looking at a *copy* of the constant.

Note that different instances of the same literal results in different constants.

for (1..3) { print(\1, ' ', \1, "\n"); push @x, 'x'; # Prevent reuse of memory addresses. }
SCALAR(0x236d94) SCALAR(0x183179c) SCALAR(0x236d94) SCALAR(0x183179c) SCALAR(0x236d94) SCALAR(0x183179c)

Replies are listed 'Best First'.
Re^10: Reference of constants and literals
by LanX (Saint) on Nov 24, 2008 at 17:51 UTC

    I have to admit, I don't understand your code, I know \1 in the context of RegEx but otherwise couldn't find any reference for it in the docs. do you have a link, please?

    please explain
    > If you see otherwise, it's because you're looking at a *copy* of the constant.

    $_[0] is supossed to be an alias to the parameter

    DB<1> sub pr { print \$_[0] } DB<2> $a="x" DB<3> print \$a SCALAR(0x852b11c) DB<4> pr $a SCALAR(0x852b11c)

    Or do you mean that aliased symbols of variables in perl don't neccessarily have the same reference?

    I suppose this can possibly be done with typeglogs ... do mean this or a similar mechanism?

    Cheers Rolf

      I have to admit, I don't understand your code, I know \1 in the context of RegEx but otherwise couldn't find any reference for it in the docs. do you have a link, please?

      1 is a constant. \ takes a reference.

      Or do you mean that aliased symbols of variables in perl don't neccessarily have the same reference?

      I didn't speculate or investigate what a copy would be made.

      However, I made a mistake. I forgot to take into account that \1 is a constant itself.

      >perl -MO=Concise -e"$x = \1" 6 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 5 <2> sassign vKS/2 ->6 3 <$> const[RV \1] s ->4 <----- - <1> ex-rv2sv sKRM*/1 ->5 4 <#> gvsv[*x] s ->5 -e syntax OK

      My conclusion was based on observed results, which were based on a faulty assumption. Please ignore.

      On the plus side, it's a simple of way of generating a unique id for a spot in a file! Isn't that what you were after? It's not clear how you'd find out which spot is associated with which id, though.

        I have to admit, I don't understand your code, I know \1 in the co +ntext of RegEx but otherwise couldn't find any reference for it in th +e docs. do you have a link, please? 1 is a constant. \ takes a reference.
        argh ... (banging the head against the keyboard) ... well sometimes I don't see the wood for the trees 8 )