|
OK, so it is not news any more, Perl 5.10 has been released on 18th December, 2007, the 20th birthday of Perl. Many people have writen articles about it. There are several presentations on-line available. For example see the discussion on PerlMonks. It has several good links. Still I think it would be good to write a few articles about the new features. Especially as many companies are very late adopters and they will want to see how can Perl 5.10 improve their life.
There are many new features, I'll have to select which ones to present. So let's start with some of the simple features. There is a new function called say. It is the same as print but it automatically adds a new line \n to every call. This does not sound like a big issue and it is indeed not a huge one, but nevertheless it saves a lot of typing, especially in debugging code. There are just so many times we type
print "$var\n";
Now we'll be able to say this:
say $var;
To people worried of new functions popping up in their old code, you ain't worry. The new function is only available if you explicitly ask for it by writing
use feature qw(say);
or if you require 5.10 to be the minimal version where your code can run:
use 5.010;
Another cute help is the // defined-or operator. It is nearly the same as the good old || but without the "0 is not a real value" bug: Earlier when we wanted to give a default value to a scalar we could write either
$x = defined $x ? $x : $DEFAULT;
which is quite long or we could write
$x ||= $DEFAULT;
but then 0 or "0" or the empty string were not accepted as valid values and were replaced by the $DEFAULT value. While in some cases this is ok, in many cases this created a bug. The new defined-or operator can solve this problem as it will return the right hand side only if the left hand value is undef. So now we are going to have short AND correct form:
$x //= $DEFAULT;
Third thing I look at in this first article is the new state keyword. This too is optional and is only included if you ask for it by saying
use feature qw(state);
or by
use 5.010;
When used it is similar to my but it creates and initializes the variable only once. It is the same as the static variable in C. Earlier we had to write something like this:
{
my $counter = 0;
sub next_counter {
$counter++;
return $counter;
}
}
Which always needed lots of explanations why $counter is set to 0 only once and how can it always get you a higher number. Now you can write this:
sub next_counter {
state $counter = 0;
$counter++;
return $counter;
}
Which is much clearer. For another use case of the state keyword check out how to hide multiple warnings of Perl?. blog comments powered by Disqus Did you like this article?Get notified when I publish new content! |