Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

What operator prepends?

by EdwardG (Vicar)
on Jan 25, 2006 at 14:05 UTC ( #525446=perlquestion: print w/ replies, xml ) Need Help??
EdwardG has asked for the wisdom of the Perl Monks concerning the following question:

The .= operator appends and is very useful.

Where is the prepend operator?


Comment on What operator prepends?
Download Code
Re: What operator prepends?
by pKai (Priest) on Jan 25, 2006 at 14:16 UTC
    substr maybe?

    Depends what you want to accomplish with "prepending".

Re: What operator prepends?
by Roy Johnson (Monsignor) on Jan 25, 2006 at 14:17 UTC
    It wasn't a useful enough operation to merit its own operator. However, you can use substr to much the same effect:
    substr($str, 0, 0) = 'new prefix'; # or 4-arg form: substr($str, 0, 0, 'new prefix');

    Caution: Contents may have been coded under pressure.
Re: What operator prepends?
by Fletch (Chancellor) on Jan 25, 2006 at 14:35 UTC

    Really .= isn't an "append operator" it's just syntactic sugar for an assignment back to the same lvalue after using the concatenation operator, just like += is syntactic sugar for adding and assigning in one step. It's just that, unlike addition (or the other mathematical operators), concatenation isn't commutative.</pedant>

    Not that it's really an answer as to why there's no prepend operator . . .

Re: What operator prepends?
by kwaping (Priest) on Jan 25, 2006 at 16:43 UTC
    Add my vote for creating a prepend operator! Until then, unfortunately you'll have to use substr as mentioned above, or simply type:
    $var = $prepended_value . $var;
Re: What operator prepends?
by ptum (Priest) on Jan 25, 2006 at 17:54 UTC

    Heh. Or maybe it is just a matter of perspective. Taking kwaping's example above, one man's append is another man's prepend, if you don't care which variable you end up with:

    $prepended_value .= $var;

    No good deed goes unpunished. -- (attributed to) Oscar Wilde
Re: What operator prepends?
by Tanktalus (Canon) on Jan 25, 2006 at 17:57 UTC

    Usually, when I want to prepend, I just change the order of operations into an append. Instead of:

    $script = ''; # or $script = <STDIN>; chomp $script; $path = '/some/path/'; $script = $path . $script;
    I'll do:
    $script = '/some/path'; $script .= ''; # or $script .= <STDIN>; chomp $script;
    Often, I find that this actually makes more sense in my head because I'm building my string from left to right, which is how I think of the string.

    Alternatives is to build the string from pieces using sprintf or join. And, in my particular example, an option would be to use the join-like File::Spec.

      Why not just something like

      $string = $prefix . $string;


      " When in doubt, use brute force." — Ken Thompson

        First off, "= [...] ." isn't an operator as per the original topic. That's two operators. ;-)

        However, more importantly, this is just not how I mentally think of creating a string. If I want to generate a string such as "this is the output", I don't think about starting with the string "output" and prepending a bunch of stuff. I think about how to create "this", then I think of how to create "is", etc. It's actually quite rare that I'll want to generate "the" before I generate "is". In fact, I often end up with code like this:

        my @text; push @text, generate_this(); push @text, generate_is(); push @text, generate_the_output(); return join ' ', @text;
        That's just how I think of the string, and I find that when my code matches the problem in my head, it's far less likely to have bugs in it. Especially expensive design bugs.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://525446]
Approved by g0n
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (8)
As of 2014-09-17 05:10 GMT
Find Nodes?
    Voting Booth?

    How do you remember the number of days in each month?

    Results (57 votes), past polls