Il codice è bene finché si rimuove il $
dalla parte anteriore della vostra chiamata subroutine. Un simbolo del dollaro indica un valore scalare, e le chiamate dovrebbe essere simile
$result1 = checkCase("Hello");
$result2 = checkCase("world");
la subroutine è anche unnec riamente lunga. La corrispondenza regex restituisce un valore vero/falso e si sta utilizzando tale valore per restituire valori true/false diversi 1
o 0
. Molto meglio restituire direttamente il risultato della corrispondenza regex.
Infine, se si lavora con caratteri ASCII, è possibile utilizzare la Maiuscolo lettera Categoria Unicode, che viene codificata utilizzando \p{Lu}
.
Spero che questa variazione sul codice sia utile. Ho cambiato leggermente il nome della subroutine perché è pratica comune usare solo lettere minuscole e caratteri di sottolineatura per identificatori di variabili e subroutine. Le lettere maiuscole sono riservate ai globals come i nomi dei pacchetti.
sub check_case {
$_[0] =~ /^\p{Lu}/
}
print check_case('Hello') ? 'YES' : 'NO', "\n";
print check_case('world') ? 'YES' : 'NO', "\n";
... e? Come non funziona? –
significa lettera maiuscola dall'ASCII? o unicode lettera maiuscola o punto di codice maiuscolo? – jm666