in reply to add text to a string

jeanluca:

I can't think of any better way to do string concatenations than the ones you presented. But next time you ask a question like this, you might want to tell us which measure of "better" you want: Faster? Smaller? More maintainable? On many occasions, you'll find that each measure of better leads to a different answer, and you'll find people giving you answers based on which "better" the writer is assuming you mean. (I keep tending toward "faster" because of my nature, but with the sort of stuff I do, I should be leaning toward clarity and maintainability...

That said, I think the ones you presented are probably very good in all three measures. It's certainly clear and maintainable. I don't benchmark Perl programs, but it's such a common operation that I imagine the compiler does a pretty good job on speed and size as well. (There are more variations of "better" as well, but those are the only three I ever think about....)

--roboticus

Replies are listed 'Best First'.
Re^2: add text to a string
by jeanluca (Deacon) on May 30, 2006 at 11:42 UTC
    you're right, sorry for that. The problem was that something like this
    $self->{blablabla}->{more_bla}->{and_more}->[$_] = "a".$self->{blablab +la}->{more_bla}->{and_more}[$_];
    doesn't look verywell.
    So I think the solution with substr looks much better!!
    But still, if something like '.=' exists, one would expect something simular for adding text to the front of a string!

    Luca

      Well, in addition to all that has been said thus far, you can also do

      $_ = 'a' . $_ for $self->{blablabla}->{more_bla}->{and_more}->[$_];

      You're right. That looks horrible. Maybe you should grab your value into a sensibly named lexical first, and reassign later so the whole operation looks clearer:

      my $entity = $self->{blablabla}{more_bla}{and_more}[$_]; $entity = 'a' . $entity; $self->{blablabla}{more_bla}{and_more}[$_] = $entity;

      This is marginally less efficient, particularly if the string in question is really big. But it deobfuscates what's going on. It would be really easy to miss the concatenation if you're reading through your code. But if you unpack your value into some sensibly named lexical before performing operations on it, the resulting code will be much easier to read.


      Dave