确定字符串是否以Perl中的大写字符开头

时间:2013-05-18 17:09:32

标签: perl case-sensitive uppercase

我需要在Perl中创建一个子程序,它确定一个字符串是否以大写字符开头。到目前为止我所拥有的是:

sub checkCase {
    if ($_[0] =~ /^[A-Z]/) {
        return 1;
    }
    else {
        return 0;
    }
}

$result1 = $checkCase("Hello");
$result2 = $checkCase("world");

2 个答案:

答案 0 :(得分:8)

只要从子例程调用的前面删除$,您的代码就可以了。美元符号表示标量值,调用应该看起来像

$result1 = checkCase("Hello");
$result2 = checkCase("world");

你的子程序也是不必要的。正则表达式匹配返回true / false值,您使用该值返回不同的true / false值10。最好直接返回正则表达式匹配的结果。

最后,如果您在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");