问题描述
通过浏览与先前有关“如何大写首字母”的问题相关的常见问题解答,我找到了许多我想尝试解决的有趣的解决方案,但是还有一个更紧迫的问题需要解决,在到达那里之前。
我的问题是我无法从每行名称的开头删除空格。名称包括名字和姓氏。姓大写。我尝试使用由Brian D Foy编辑的FAQ中找到的解决方案,但是无论我如何尝试,我都会得到Use of uninitialised value $_ in substitution (s///) at ...
我的代码是这样的:
open DATA,“<“,“name.txt”;
my @file = <DATA>;
for each my $name (@file) {
chomp $name;
my @arr;
# find ‘Mr.’ and ‘Ms.’,then ignore them
@arr = split(/M.\.\s/g,$name);
# remove leading white space from first names
@arr = s/^\s+//g;
print @arr,”\n”;
}
这是练习的一部分。我的解决方案与作者自己的解决方案几乎没有相似之处。在这里,我实际上应该将每个名字的首字母大写。我无法通过当前的问题来完成练习。尽管代码对于实现既定目标而言是很长的,但在尝试找到实现相同结果的更简洁方法之前,我想利用学习助手中介绍的方法。就目前而言,我将非常清楚我为什么收到错误消息以及为什么我不能删除空白。谢谢。
解决方法
您可以从正则表达式的名称中删除空格。
因此您的代码将变为:
open DATA,"<","name.txt";
my @file = <DATA>;
foreach my $name (@file) {
chomp $name;
# find ‘Mr.’ and ‘Ms.’,then ignore them
my @arr = split(/M.\.\s+/g,$name);
print @arr,"\n";
}