I didn't realize until recently that Perl 5.10 had significant new features and I was wondering if anyone could give me some good resources for learning about those. I searched for them on Google and all I found was some slides and a quick overview. Some of the features (to me at least) would be nice if they had more explanation.
Any links would be appreciated.
-fREW
The perldelta manpage has all the nitty-gritty details. There's a brief (but informative) slide presentation, Perl 5.10 for people who aren't totally insane. And a good PerlMonks discussion on the issue.
I found this article useful.
This one is more focused on 5.10 Advanced Regular Expressions.
And also A beginners' Introduction to Perl 5.10.
Finally, this excellent summary on why you should start using Perl 5.10 and from which I extracted the following:
- state variables No more scoping variables with an outer curly block, or the naughty my $f if 0 trick (the latter is now a syntax error).
- defined-or No more $x = defined $y ? $y : $z, you may write $x = $y // $z instead.
- regexp improvements Lots of work done by dave_the_m to clean up the internals, which paved the way for demerphq to add all sorts of new cool stuff.
- smaller variable footprints Nicholas Clark worked on the implementations of SVs, AVs, HVs and other data structures to reduce their size to a point that happens to hit a sweet spot on 32-bit architectures
- smaller constant sub footprints Nicholas Clark reduced the size of constant subs (like use constant FOO => 2). The result when loading a module like POSIX is significant.
- stacked filetests you can now say if (-e -f -x $file). Perl 6 was supposed to allow this, but they moved in a different direction. Oh well.
- lexical $_ allows you to nest $_ (without using local).
- _ prototype you can now declare a sub with prototype . If called with no arguments, gets fed with $ (allows you to replace builtins more cleanly).
- x operator on a list you can now say my @arr = qw(x y z) x 4. (Update: this feature was backported to the 5.8 codebase after having been implemented in blead, which is how Somni notices that it is available in 5.8.8).
- switch a true switch/given construct, inspired by Perl 6
- smart match operator (~~) to go with the switch
- closure improvements dave_the_m thoroughly revamped the closure handling code to fix a number of buggy behaviours and memory leaks.
- faster Unicode lc, uc and /i are faster on Unicode strings. Improvements to the UTF-8 cache.
- improved sorts inplace sorts performed when possible, rather than using a temporary. Sort functions can be called recursively: you can sort a tree
- map in void context is no longer evil. Only morally.
- less opcodes used in the creation of anonymous lists and hashes. Faster pussycat!
- tainting improvements More things that could be tainted are marked as such (such as sprintf formats)
- $# and $* removed Less action at a distance
- perlcc and JPL removed These things were just bug magnets, and no-one cared enough about them.