hide random home http://www.fmi.uni-passau.de/archive/doc/unix/perl/faq/2.15.html (Einblicke ins Internet, 10/1995)

How can I change the first N letters of a string?

How can I change the first N letters of a string?


    Remember that the substr() function produces an lvalue, that is, it may be
    assigned to.  Therefore, to change the first character to an S, you could
    do this:

        substr($var,0,1) = 'S';

    This assumes that $[ is 0;  for a library routine where you can't know $[,
    you should use this instead:

        substr($var,$[,1) = 'S';

    While it would be slower, you could in this case use a substitute:

        $var =~ s/^./S/;
    
    But this won't work if the string is empty or its first character is a
    newline, which "." will never match.  So you could use this instead:

        $var =~ s/^[^\0]?/S/;

    To do things like translation of the first part of a string, use substr,
    as in:

        substr($var, $[, 10) =~ tr/a-z/A-Z/;

    If you don't know then length of what to translate, something like
    this works:

        /^(\S+)/ && substr($_,$[,length($1)) =~ tr/a-z/A-Z/;
    
    For some things it's convenient to use the /e switch of the 
    substitute operator:

        s/^(\S+)/($tmp = $1) =~ tr#a-z#A-Z#, $tmp/e

    although in this case, it runs more slowly than does the previous example.