in reply to Re: Re: Re: Re: Memory Use/Garbage Collection: Java vs Perl
in thread Memory Use/Garbage Collection: Java vs Perl

That's interesting, thanks. Am I correct in my (I'm not sure if it's a memory of something I read somewhere, or an assumption I have formed) that Perl will fold string constants?

From my (brief and un-expert) look at the byte code produced by javac, it seems to be pushing a new copy of the two constants onto the stack (they could be pointers to a single copy, I can't make up my mind) prior to the call to StringBuffer, at each invokation?

Whereas I assume that Perl would push a reference to a single copy of each.

Thinking about that, javac is probably pushing a pointer too.


Well It's better than the Abottoire, but Yorkshire!

Replies are listed 'Best First'.
Re6: Memory Use/Garbage Collection: Java vs Perl
by John M. Dlugosz (Monsignor) on Sep 03, 2002 at 15:25 UTC
    Am I correct in my (I'm not sure if it's a memory of something I read somewhere, or an assumption I have formed) that Perl will fold string constants?

    Apparently it does not.

    perl -MO=Deparse,-q -e"print qq(I am $x\n) . 'and fold this?'"
    it taken as
    print(('I am ' . $x . "\n") . 'and fold this?');
    not print('I am ' . $x . "\nand fold this?").

    —John

      True, but

      perl -MO=Deparse,-q -e "print 'Hello, ' . 'World'"

      Is parsed as

      print 'Hello, World'; -e syntax OK

      Apparently, the example you gave was more complex than the parser wanted to deal with.

      Update Added -q, as John pointed out below...

        You forgot the -q, so the string folding is done by Deparse's formatting, totally hiding what you were trying to detect.

        Trying it with, it seems that's still indeed working. A few other quick tests, and it seems that the presence of interpolation prevents the merging, rather than merging the tail-end piece as you would expect.

        Any perl hacker want to comment?

        —John