In this blog post, "Ugly Old Perl", the author discusses how he(?) is still finding old Perl code like this:
open(FH, "<<$runpath/log/output.log ") || die "Can't write output.log!"
instead of the newer safer
open( my $fh, '<<', "$runpath/log/output.log" ) || die "Can't write output.log!"
He discusses how he's tried to introduce his co-workers to three-arg
open calls, and they have no idea that such a thing exists. Perl 5 has become such a success, so ubiquitous, that people don't realize there have been improvements since they first learned it.
I'm sure these people don't know any of the changes made to Perl regexes, too. They might still be using
study as part of the belief that it magically makes regexes match faster.
These are the users that will never use attributes, or Moose, or much of anything discussed in Modern Perl.
I'm OK with that.
These are the users who are going to stick with the Perl they know until they leapfrog to something else. That something else might be Ruby, or it might be Perl 6, but I know that they're never going to make a straight progression.
If you're reading this blog, chances are you're a progresser. You follow each Perl release. You are interested in the incremental changes. You want to know about named captures in regexes and you find ways to use them in your existing code.
But most of the users of Perl aren't. They're using Perl as a tool to get stuff done, and it's not a hobby. There's nothing wrong with that. They won't change their way of seeing Perl until there's something to leapfrog over. All we can do is make Perl 5.12 or Perl 6 a fantastic target to leap to, something to entice them to make the leap.
(Aside: He also brings up the idea often trotted out that Perl 6 be named something other than Perl. It won't happen, so there's no point in discussing it.)