我需要在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