Perl 5.18 was introduced in 2013. Judging by the history and the number of release candidates, (not to mention the fixes in 5.20), it was a fairly major internal revision. First of all, there's a new mechanism for allowing experimental features to be used without the risk of leaving around things that might break later. As we all know, if there was no uncertainty, it wouldn't be an experiment, and not all new ideas are good ones. (Smart matching comes to mind). Using a feature considered experimental will generate a new category of warning, but it can be turned off with: no warnings "experimental::feature_name"; use feature "feature_name"; # would warn without the prev line The assumption is that if you do that, it's deliberate, and all the uses can be found by removing the line again. Probably the biggest feature of 5.18 is a number of changes to hash-handling though they shouldn't be visible to people with sensible application code. To quote directly from the delta: "By default, two distinct hash variables with identical keys and values may now provide their contents in a different order where it was previously identical." If that causes you a problem, I don't have a lot of sympathy. Hashes are explicitly unordered structures, and relying on an undocumented implementation attribute of anything is asking for trouble. The details of the changes shouldn't affect anyone dealing with production code. They're mostly of interest to internals developers experimenting with alternative implementations, especially for security reasons. Unicode support has now extended from 6.1 to 6.2, and character names can have aliases with non-Latin characters in them. The Dtrace facility has gained some additional probes. If you want access to the last filehandle read, there's a new variable: ${^LAST_FH} Regexes have gained another feature that's experimental so far; set operations They look like a good way to make regexes even harder to understand. Lexical subroutines are new, and also experimental for the moment. ?benefit Once upon a time, boys and girls, there was an evil feature called the computed branch (or self-modifying code), that was banished from the digital world by the wizard Dijkstra. It appears to have slithered back from the outer darkness, in the form of "Computed Labels". To quote the incantation: "The loop controls next, last and redo, and the special dump operator, now allow arbitrary expressions to be used to compute labels at run time." Those are dodgy at the best of times; somebody please tell me I've fundamentally misunderstood the meaning of that. The kill command's handling of negative signal names has been tidied up. Some obscure security issues have been fixed, documented, or both. There are some changes to character and variable names and complex Unicode matches that shouldn't bother anyone who hasn't been doing deliberately weird things. Vertical tabs are now officially whitespace, which brings back youthful memories of punching printer carriage control tapes, a phrase which is probably meaningless to half of you. Smartmatch, which turned out to be an oxymoron, has been giving grief again, so it's officially now "experimental". (But of course, you can turn off the warnings with ' no if $] >= 5.018, warnings => "experimental::smartmatch";' Another 5.10 "feature" that proved problematic is lexical $_, so it's experimental too. Alphanumeric operators must now be separated from the closing delimiter of regular expressions You may no longer write something like: m/a/and 1 Instead you must write m/a/ and 1 Another coding weirdness now precluded: qw(...) can no longer be used as parentheses so foreach $x qw(a b c) {...} now has to be written as foreach $x (qw(a b c)) {...} When "require" encounters an unreadable file, it now dies. It used to ignore the file and continue searching the directories in @INC (One of those cases where immediate failure is preferable to unpredictable continuation.) A whole list of modules is going to be removed from the core distribution, but for the moment will produce "deprecated" warnings, so if you have them, you'll presumably find out. A lot of modules and documents have been upgraded, which should only do good, but there are also some new and revised diagnostics, so if working code suddenly starts whining, you'll probably have to read the delta to find out what to do. A few old and long-defunct OSs are going to become unsupported, but I'd be surprised if anybody noticed.