Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: lcfirst and ucfirst not working

by davido (Archbishop)
on Aug 27, 2012 at 08:24 UTC ( #989941=note: print w/ replies, xml ) Need Help??

in reply to lcfirst and ucfirst not working

It's not entirely clear what you're trying to accomplish (or demonstrate) with that code snippet. It is using a variable that is never assigned a value ($little), and it never even uses the function ucfirst. ...and there's no function called 'lsfirst' (at least not as part of core Perl).

But I can assure you that the \L, \U, \l, and \u metacharacters do work, as do their function based cousins, lc, uc, lcfirst, and ucfirst:

my $string_upper = "BAR"; my $string_lower = "bar"; print "Testing metacharacter operations.\n"; print "\\L: [$string_upper] => [\L$string_upper]\n"; print "\\U: [$string_lower] => [\U$string_lower]\n"; print "\\l: [$string_upper] => [\l$string_upper]\n"; print "\\u: [$string_lower] => [\u$string_lower]\n"; print "\nTesting function operations.\n"; print " lc($string_upper) => (" , lc $string_upper, ")\n"; print " uc($string_lower) => (" , uc $string_lower, ")\n"; print "lcfirst($string_upper) => (" , lcfirst $string_upper, ")\n"; print "ucfirst($string_lower) => (" , ucfirst $string_lower, ")\n";


Testing metacharacter operations. \L: [BAR] => [bar] \U: [bar] => [BAR] \l: [BAR] => [bAR] \u: [bar] => [Bar] Testing function operations. lc(BAR) => (bar) uc(bar) => (BAR) lcfirst(BAR) => (bAR) ucfirst(bar) => (Bar)


Comment on Re: lcfirst and ucfirst not working
Select or Download Code
Re^2: lcfirst and ucfirst not working
by laksh (Novice) on Aug 27, 2012 at 14:58 UTC
    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)
      Function calls are not interpolated in double quotes.
      لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ

      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";


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


      $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).


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://989941]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (16)
As of 2015-05-28 14:49 GMT
Find Nodes?
    Voting Booth?

    In my home, the TV remote control is ...

    Results (560 votes), past polls