Perl: Named captures in regexps
In a regular expression you can capture strings into variables using the default syntax:
$str = "2020-05-20";
$str =~ m/(\d{4})-(\d{2})-(\d{2})/;
printf("Year: %s Month: %s Day: %s\n", $1, $2, $3);
In a more complex regular expression/string things may move around. In this case it's better to use named captures instead of numeric captures. This can be done by using the (?<name>)
syntax. This will capture that parenthesis pair in to the hash %+
with the name specified.
$str = "2020-05-20";
$str =~ m/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
printf("Year: %s Month: %s Day: %s\n", $+{year},$+{month},$+{day});
Using named captures you can easily update your regular expression if the position of elements in your string change.
Note: If you use named captures, Perl also populates the numeric equivalent.