我需要在 Perl 中创建一个子例程来确定字符串是否以大写字符开头。到目前为止,我有以下内容:
sub checkCase {
if ($_[0] =~ /^[A-Z]/) {
return 1;
}
else {
return 0;
}
}
$result1 = $checkCase("Hello");
$result2 = $checkCase("world");
我需要在 Perl 中创建一个子例程来确定字符串是否以大写字符开头。到目前为止,我有以下内容:
sub checkCase {
if ($_[0] =~ /^[A-Z]/) {
return 1;
}
else {
return 0;
}
}
$result1 = $checkCase("Hello");
$result2 = $checkCase("world");
只要您$
从子例程调用的前面删除 ,您的代码就可以了。美元符号表示标量值,调用应如下所示
$result1 = checkCase("Hello");
$result2 = checkCase("world");
您的子程序也不必要地长。正则表达式匹配返回一个真/假值,并且您正在使用该值返回不同的真/假值1
或0
. 直接返回正则表达式匹配的结果要好得多。
最后,如果您在 ASCII 字符之外工作,那么您可能需要使用大写字母Unicode 类别,该类别使用\p{Lu}
.
我希望您的代码的这种变化是有用的。我稍微更改了子例程的名称,因为标准做法是只使用小写字母和下划线作为变量和子例程标识符。大写字母保留给像包名这样的全局变量。
sub check_case {
$_[0] =~ /^\p{Lu}/
}
print check_case('Hello') ? 'YES' : 'NO', "\n";
print check_case('world') ? 'YES' : 'NO', "\n";
这几乎是正确的。但[A-Z]
可能与大写重音字符不匹配,具体取决于您的语言环境。更好用/^[[:upper:]]/
。
此外,您的子例程调用不应该$
在它们前面有字符。即他们应该是:
$result1 = checkCase("Hello");
$result2 = checkCase("world");