24

我猜这是一个简单的问题,但我试图使用以下命令将行的第一个小写字母从 .txt 文件更改为大写

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

当我执行它时,会发生什么,而不是将小写字母更改为大写字母,而是将行首的小写字母替换为行中的最高有效位。例如,该行nAkld987aBALPaapofikU88而不是被替换NAkld987Akld987...

4

4 回答 4

30

你可以/应该使用ucfirst. 我说应该,因为对于维护者来说,你的意图是将字符串的第一个字母大写更明显。我喜欢正则表达式,但在这种情况下,我觉得这不是正确的方法。

my $str = "test";
print ucfirst($str);
于 2012-11-21T16:31:47.893 回答
24

您需要first character在捕获组中捕获 ,并使用back reference将其转换为uppercaseusing \u

尝试使用这个: -

$_ =~ s/^([a-z])/\u$1/;
于 2012-11-21T16:32:00.963 回答
15

您可以只使用该ucfirst功能。

如果你想使用正则表达式,你可以这样做:

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

或者

$_ =~ s/^([a-z])/\U$1\E/;
于 2012-11-21T16:32:57.300 回答
0

由于对正则表达式不太熟练,我完成了这个map(基本上是foreach,除了它既迭代一个列表并返回被操纵的列表):

$string = join " ", map { ucfirst } split " ", $string;
于 2018-02-26T23:12:15.023 回答