2013-05-18 16 views
6

Ich muss eine Unterroutine in Perl machen, die bestimmt, ob eine Zeichenfolge mit einem Großbuchstaben beginnt. Was ich bisher habe ist folgendes:Ermitteln, ob ein String mit einem Großbuchstaben in Perl beginnt

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

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

... und? Wie funktioniert es nicht? –

+2

bedeuten Großbuchstaben aus dem ASCII? oder Unicode Großbuchstabe oder Großbuchstabe Codepoint? – jm666

Antwort

4

Das ist fast richtig. Aber stimmt möglicherweise nicht mit Großbuchstaben überein, abhängig von Ihrem Gebietsschema. Besser zu verwenden /^[[:upper:]]/.

Auch Ihre Subroutinenaufrufe sollten nicht das Zeichen $ vor ihnen haben. I.e. sie sollten sein:

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

* "sollte nicht das' $ '" * ist eine Untertreibung, es ist ein Syntaxfehler. Ich nehme an @DanJones bedeutete "& sub" -Aufruf, aber Sie haben Recht, dass dies auch nicht verwendet werden sollte. – amon

8

Der Code ist in Ordnung, solange Sie die $ von der Vorderseite des Unterprogramm-Aufruf entfernen. Ein Dollarzeichen zeigt einen skalaren Wert, und die Anrufe wie

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

Ihr Unterprogramm auch essarily ist unnec lang aussehen sollte. Die Regex-Übereinstimmung gibt einen Wahr/Falsch-Wert zurück und Sie verwenden diesen Wert, um verschiedene Wahr/Falsch-Werte 1 oder 0 zurückzugeben. Viel besser, das Ergebnis der Regex-Übereinstimmung direkt zurückzugeben.

Schließlich, wenn Sie außerhalb ASCII-Zeichen arbeiten dann können Sie die Großbuchstaben Unicode Kategorie verwenden, die \p{Lu} codiert wird, verwendet wird.

Ich hoffe, dass diese Variante Ihres Codes nützlich ist. Ich habe den Namen des Unterprogramms leicht geändert, weil es üblich ist, nur Kleinbuchstaben und Unterstriche für Variablen- und Unterprogramm-Identifikatoren zu verwenden. Großbuchstaben sind Globals wie Paketnamen vorbehalten.

sub check_case { 
    $_[0] =~ /^\p{Lu}/ 
} 

print check_case('Hello') ? 'YES' : 'NO', "\n"; 
print check_case('world') ? 'YES' : 'NO', "\n"; 
Verwandte Themen