in reply to Re: lcfirst and ucfirst not working
in thread lcfirst and ucfirst not working

I am trying to do as per below code but it is not working, here I dont want to use ucfirst
print "Please enter your name:\n"; chomp($name = <>); $x = "\u substr($name,0,1)\n"; print $x;
But it giving the result Please enter your name: sds Substr(sds,0,1)

Replies are listed 'Best First'.
Re^3: lcfirst and ucfirst not working
by davido (Cardinal) on Aug 27, 2012 at 17:38 UTC

    As choroba correctly mentioned, function calls don't interpolate inside of strings (at least not unless you resort to some ugly trickery). The far better approach is this:

    print "Please enter your name:\n"; chomp( $name = <> ); $x = ucfirst $name; print $x;

    If you have a good reason for not wanting to use ucfirst, then you do have alternatives:

    # The \u metacharacter acts only upon the first character. # No need for substr. $x = "\u$name";

    ...or...

    # Assuming Perl 5.14+ $x = $name =~ s/^(.)/\u$1/r;

    ...or...

    $x = $name; $x =~ s/^(.)/\u$1/;

    But why isn't ucfirst available to you? Also, did you read through the code example I provided in my earlier Post? It should have made it reasonably clear that "\u$string" does what you want without resorting to using substr (unless we're not seeing some relevant code from you that would make this approach unsavory).


    Dave

Re^3: lcfirst and ucfirst not working
by choroba (Cardinal) on Aug 27, 2012 at 15:05 UTC
    Function calls are not interpolated in double quotes.
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ