我需要在Perl中创建一个子程序,它确定一个字符串是否以大写字符开头。到目前为止我所拥有的是:
sub checkCase {
if ($_[0] =~ /^[A-Z]/) {
return 1;
}
else {
return 0;
}
}
$result1 = $checkCase("Hello");
$result2 = $checkCase("world");
答案 0 :(得分:8)
只要从子例程调用的前面删除$
,您的代码就可以了。美元符号表示标量值,调用应该看起来像
$result1 = checkCase("Hello");
$result2 = checkCase("world");
你的子程序也是不必要的。正则表达式匹配返回true / false值,您使用该值返回不同的true / false值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";
答案 1 :(得分:4)
这几乎是正确的。但[A-Z]
可能与大写重音字符不匹配,具体取决于您的语言环境。最好使用/^[[:upper:]]/
。
您的子程序调用也不应该在它们前面有$
个字符。即他们应该是:
$result1 = checkCase("Hello");
$result2 = checkCase("world");