http://www.perlmonks.org?node_id=990030


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

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