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
In reply to Re^3: lcfirst and ucfirst not working
by davido
in thread lcfirst and ucfirst not working
by laksh
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |