Perl embarking on new era (perl 5.13.7 features)

perl 5.13.7がリリースされた*1。このバージョンは革新的な新機能を搭載しており、新時代のPerlといっても過言ではないものとなっている。
それが以下の機能である。
Array and hash container functions accept references

All built-in functions that operate directly on array or
hash containers now also accept hard references to arrays
or hashes:

|----------------------------+---------------------------|
| Traditional syntax         | Terse syntax              |
|----------------------------+---------------------------|
| push @$arrayref, @stuff    | push $arrayref, @stuff    |
| unshift @$arrayref, @stuff | unshift $arrayref, @stuff |
| pop @$arrayref             | pop $arrayref             |
| shift @$arrayref           | shift $arrayref           |
| splice @$arrayref, 0, 2    | splice $arrayref, 0, 2    |
| keys %$hashref             | keys $hashref             |
| keys @$arrayref            | keys $arrayref            |
| values %$hashref           | values $hashref           |
| values @$arrayref          | values $arrayref          |
| ($k,$v) = each %$hashref   | ($k,$v) = each $hashref   |
| ($k,$v) = each @$arrayref  | ($k,$v) = each $arrayref  |
|----------------------------+---------------------------|

This allows these built-in functions to act on long
dereferencing chains or on the return value of subroutines
without needing to wrap them in @{} or %{}:

  push @{$obj->tags}, $new_tag;  # old way
  push $obj->tags,    $new_tag;  # new way

  for ( keys %{$hoh->{genres}{artists}} ) {...} # old way 
  for ( keys $hoh->{genres}{artists}    ) {...} # new way 

つまり、コンテナ型のデリファレンスは、多くのケースでシジルが必要なくなったのだ!
これにより煩雑だったリファレンスの扱いが非常に単純になり、プログラミングも楽になるに違いない。
Perl 5.12はメジャーリリースとはいえ新機能はごく少なく、内部構造の整理が主だった。しかしPerl 5.14は今回の新機能のみならず、s///r (non-destructive substitution)やpackage BLOCK syntaxなどの興味深い新機能が目白押しとなっている。これは正規リリースが非常に楽しみだ。

*1:追記:5.13.xは5.14へ向けた開発版である。