7

我需要在 Perl 中创建一个子例程来确定字符串是否以大写字符开头。到目前为止,我有以下内容:

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

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

2 回答 2

8

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

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

您的子程序也不必要地长。正则表达式匹配返回一个真/假值,并且您正在使用该值返回不同的真/假值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";
于 2013-05-18T17:47:56.977 回答
4

这几乎是正确的。但[A-Z]可能与大写重音字符不匹配,具体取决于您的语言环境。更好用/^[[:upper:]]/

此外,您的子例程调用不应该$在它们前面有字符。即他们应该是:

$result1 = checkCase("Hello");
$result2 = checkCase("world");
于 2013-05-18T17:17:15.403 回答