(?{ # prefix codeblock: local $number = ""; local $name = ""; local $rest = ""; }) ^ [\ \t]* (?: ([0-9]+)\.[ ] (?{ $number = $^N; }) ) (?: ([A-Z][A-Z]+)[ ]* (?{ $name = ucfirst(lc($^N)); }) ) (?: (.*) (?{ $rest = $^N; }) ) $ (?{ # postfix codeblock: ${$hashname}{ 'number' } = $number; ${$hashname}{ 'name' } = $name; ${$hashname}{ 'rest' } = $rest; })