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...
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/;
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);
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/;
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;