2013-05-18 43 views
6

我需要在Perl中創建一個子程序,它確定一個字符串是否以大寫字符開頭。到目前爲止,我有以下幾點:確定一個字符串是否以Perl中的大寫字符開頭

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

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

...和?它怎麼不起作用? –

+2

是否表示ASCII的大寫字母?或unicode大寫字母或大寫codepoint? – jm666

回答

4

這幾乎是正確的。但[A-Z]可能不匹配大寫字母重音字符,具體取決於您的語言環境。最好使用/^[[:upper:]]/

另外你的子程序調用不應該在它們前面有$字符。即他們應該是:

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

*「不應該有'$'」*是輕描淡寫,這是一個語法錯誤。我想@DJJones意味着'&sub'風格的調用,但是你是對的,這也不應該被使用。 – amon

8

你的代碼是罰款,只要你從子程序調用的前面卸下$。美元符號表示標量值,並且調用應該看起來像

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

您的子程序也不是很長。正則表達式匹配返回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"; 
相關問題