Count the number of vowel letters in the given word.
Of course, we will abstract now from the difference between letters and sounds and will only count the number of vowel letters: a, e, i, o, and u.
my $word = 'Hello';
$word ~~ m:g:i/<[aeiou]>/;
Here, the given
$word is matched against a regex that contains a character class with all the letters of our interest. Character classes in regexes use the
<[...]> syntax. The regex is prefixed with the
:g adverb, making it match as many times as needed to cover the whole string. The second adverb,
:i, makes the regex case-insensitive.
The result of the match is a match object
$/, which contains all the occurrences of vowel letters found in the word. Its length is the number we need. So, printing
$/.elems gives the answer.
To extend the match to allow characters with diacritics, such as ü, the simplest is to add another adverb,
:m, as shown in the next example.
$word = 'Münich';
$word ~~ m:g:i:m/<[aeiou]>/;
This program prints 2, as both ü and i matched.
If you prefer the long adverb names, here is the code:
$word ~~ m:global:ignorecase:ignoremark/<[aeiou]>/;