MathewM has asked for the wisdom of the Perl Monks concerning the following question:

There is a string:$packet ="abcdefg". I want to change the 1st element into "X",
-------------------------
$packet ="abcdefg";
$packet[0] ="X";
print $packet;
-------------------------
However, the string still is "abcdefg" instead of "Xbcdefg". Could someone give me a hand? thanks

Replies are listed 'Best First'.
Re: Change a String's Element
by NetWallah (Canon) on Dec 10, 2010 at 05:36 UTC
    If you "use strict;" it would tell you that @packet is different from $packet.

    You can accomplish what you want by

    substr($packet,0,1) = "X";

         Syntactic sugar causes cancer of the semicolon.        --Alan Perlis

Re: Change a String's Element
by chrestomanci (Priest) on Dec 10, 2010 at 09:11 UTC

    I think that you are confusing perl with C. I attempted to do similar things when I first started perl programming.

    In C, a string is an array of bytes (with a null byte as a terminator), so you can write:

    char * packet = "abcdefg"; packet[0] = 'X'; /* packet now contains "Xbcdefg" */

    You can't do that in perl, because in a perl scalar variable can contain a string as a single item. It usually makes no sense to treat it as some sort of list type containing characters or bytes.

    As other posters have said, if you want to change one character of a string, then you can use substr, but I suspect that is not what you are trying to do.

    If you really want an array of characters, then you can declare one explicitly with something like:

    @packet = ('a', 'b', 'c'); @packet = qw( a b c ); @packet = split //, "abc";

    (All three lines produce the same result)

    What is it that you are trying to achieve? I think if you give us more detail, we can help you solve your actual problem rather than natively pointing out what is wrong with what you have done so far.

      I think that you are confusing perl with C

      Maybe, but PHP and Python support this syntax as well.
Re: Change a String's Element
by perl_lover (Chaplain) on Dec 10, 2010 at 05:50 UTC
Re: Change a String's Element
by BrowserUk (Patriarch) on Dec 10, 2010 at 05:38 UTC
Re: Change a String's Element
by jwkrahn (Abbot) on Dec 10, 2010 at 07:10 UTC
    my $packet = "abcdefg"; substr $packet, 0, 1, "X"; print $packet;
Re: Change a String's Element
by MishaMoose (Scribe) on Dec 10, 2010 at 15:01 UTC

    Normally I would hesitate to give this adivce becuase I do not like to seem snarky, but with this and your previous question I am sensing some very basic confusion about Perl and programming in general. I think a lot of benefit would be gained by some careful reading of an introductory Perl book or on line documents,

    "Learning Perl" in particular comes to mind. and I am certain the other monks have wonderful lists of resources.

    I hope this is helpful and wish you well in you coding

    Misha/Michael - Russian student, grognard, bemused observer of humanity and self professed programmer with delusions of relevance