我需要在Perl中创建一个子程序,它确定一个字符串是否以大写字符开头。到目前为止,我有以下几点:确定一个字符串是否以Perl中的大写字符开头
sub checkCase {
if ($_[0] =~ /^[A-Z]/) {
return 1;
}
else {
return 0;
}
}
$result1 = $checkCase("Hello");
$result2 = $checkCase("world");
我需要在Perl中创建一个子程序,它确定一个字符串是否以大写字符开头。到目前为止,我有以下几点:确定一个字符串是否以Perl中的大写字符开头
sub checkCase {
if ($_[0] =~ /^[A-Z]/) {
return 1;
}
else {
return 0;
}
}
$result1 = $checkCase("Hello");
$result2 = $checkCase("world");
这几乎是正确的。但[A-Z]
可能不匹配大写字母重音字符,具体取决于您的语言环境。最好使用/^[[:upper:]]/
。
另外你的子程序调用不应该在它们前面有$
字符。即他们应该是:
$result1 = checkCase("Hello");
$result2 = checkCase("world");
*“不应该有'$'”*是轻描淡写,这是一个语法错误。我想@DJJones意味着'&sub'风格的调用,但是你是对的,这也不应该被使用。 – amon
你的代码是罚款,只要你从子程序调用的前面卸下$
。美元符号表示标量值,并且调用应该看起来像
$result1 = checkCase("Hello");
$result2 = checkCase("world");
您的子程序也不是很长。正则表达式匹配返回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";
...和?它怎么不起作用? –
是否表示ASCII的大写字母?或unicode大写字母或大写codepoint? – jm666