new => [
['<code>//</code>', 'defined-or operator'],
['<code>~~</code>', 'smart-match operator to compare different data types <small>(updated in v5.10.1)</small>', 'experimental::smartmatch'],
+ ['<code>say</code>', 'print with newline, equivalent to <code>print @_, "\n"</code>'],
['<code>given</code>', 'switch statement to smart-match with <code>when</code>/<code>default</code>', 'experimental::smartmatch'],
['<code>/(?<name>)/</code>', 'named capture buffers into <code>%+</code>'],
+ ['<code>/(?1)/</code>', 'recursive regular expression patterns'],
+ ['<code>/.++/</code>', 'possessive quantifiers <code>?+</code>, <code>*+</code>, <code>++</code> to match greedily'],
['<code>s/keep\K//</code>', 'floating positive lookbehind, efficient alternative for <code>s/(keep)/$1/</code>'],
['<code>/\v/, /\h/</code>', 'vertical and horizontal whitespace escapes'],
['<code>my $_</code>', 'lexically scoped version of the default variable', v0.5.23.4, 'experimental::lexical_topic'],
+ ['<code>state</code>', 'persistent <code>my</code> variables'],
],
release => '2007-12-18',
distro => {
v5.22 => {
new => [
- ['<code>\$alias =</code>', 'aliasing via reference'],
+ ['<code>\$alias =</code>', 'aliasing via reference (scoped as of v5.25.3)', 'experimental::refaliasing'],
['<code><<>></code>', 'safe <code>readline</code> ignoring open flags in arguments'],
['<code>/()/n</code>', 'flag to disable numbered capturing, turning <code>()</code> into <code>(?:)</code>'],
['<code>/\b{}/</code>', 'boundary types: <em>gcb</em> (grapheme cluster), <em>sb</em> (sentence), <em>wb</em> (word)'],
unicode => '8.0',
release => '2016-05-09',
},
+
+ v5.25.8 => {
+ new => [
+ ['<code><<~EOT</code>', 'indented here-docs, strips same whitespace before delimiter in each line'],
+ ['<code>@{^CAPTURE}</code>', q"array of last match's captures, so <code>@{^CAPTURE}[0]</code> is <code>$1</code>"],
+ ],
+ unicode => '9.0', # also Script_Extensions/scx in "\p{script}"
+ release => '2016-12-20',
+ },
}