web-dev-qa-db-fra.com

Change le premier caractère d'une ligne avec perl majuscule

C’est une question simple, je suppose, mais j’essayais de changer uniquement la première lettre minuscule d’une ligne, d’un fichier .txt à une lettre majuscule, en utilisant ce qui suit: 

$_ =~ s/^[a-z]/\U/;

Lorsque je l'exécute, il se produit qu'au lieu de changer les minuscules en majuscules, les minuscules au début de la ligne sont remplacées par le bit le plus significatif de la ligne. Par exemple, la ligne nAkld987aBALPaapofikU88 au lieu d'être remplacée par NAkld987 devient Akld987...

22
TheBlackCorsair

Vous devez capturer le first character dans un groupe de capture et utiliser back reference pour le convertir en uppercase à l'aide de \u.

Essayez d'utiliser ceci: -

$_ =~ s/^([a-z])/\u$1/;
23
Rohit Jain

Vous pouvez/devriez utiliser ucfirst. Je dis que devrait, car il est beaucoup plus évident pour un responsable que votre intention est de mettre en majuscule la première lettre de la chaîne. J'aime les expressions régulières, mais dans ce cas, j'estime que ce n'est pas la bonne approche.

my $str = "test";
print ucfirst($str);
30
RC.

Vous pouvez simplement utiliser la fonction ucfirst

Si vous voulez utiliser regex, vous pouvez faire:

$_ =~ s/^([a-z])/\u$1/;

ou

$_ =~ s/^([a-z])/\U$1\E/;
15
codaddict

Comme je ne maîtrisais pas bien les expressions régulières, j’ai accompli ceci avec map (qui est fondamentalement foreach, sauf qu’il itère une liste et renvoie la liste manipulée): 

$string = join " ", map { ucfirst } split " ", $string;
0
felwithe