CINXE.COM

perl592delta - what is new for perl v5.9.2 - Perldoc Browser

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>perl592delta - what is new for perl v5.9.2 - Perldoc Browser</title> <link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="Perldoc Browser"> <link rel="canonical" href="https://perldoc.perl.org/perl592delta"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/stackoverflow-light.min.css" integrity="sha512-cG1IdFxqipi3gqLmksLtuk13C+hBa57a6zpWxMeoY3Q9O6ooFxq50DayCdm0QrDgZjMUn23z/0PMZlgft7Yp5Q==" crossorigin="anonymous" /> <style> body { background: #f4f4f5; color: #020202; } .navbar-dark { background-image: -webkit-linear-gradient(top, #005f85 0, #002e49 100%); background-image: -o-linear-gradient(top, #005f85 0, #002e49 100%); background-image: linear-gradient(to bottom, #005f85 0, #002e49 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff005f85', endColorstr='#ff002e49', GradientType=0); background-repeat: repeat-x; } .navbar-dark .navbar-nav .nav-link, .navbar-dark .navbar-nav .nav-link:focus { color: #fff } .navbar-dark .navbar-nav .nav-link:hover { color: #ffef68 } #wrapperlicious { margin: 0 auto; font: 0.9em 'Helvetica Neue', Helvetica, sans-serif; font-weight: normal; line-height: 1.5em; margin: 0; padding: 0; } #wrapperlicious h1 { font-size: 1.5em } #wrapperlicious h2 { font-size: 1.3em } #wrapperlicious h3 { font-size: 1.1em } #wrapperlicious h4 { font-size: 0.9em } #wrapperlicious h1, #wrapperlicious h2, #wrapperlicious h3, #wrapperlicious h4, #wrapperlicious dt { color: #020202; margin-top: 1em; margin-bottom: 1em; position: relative; font-weight: bold; } #wrapperlicious a { color: inherit; text-decoration: underline } #wrapperlicious #toc { text-decoration: none } #wrapperlicious a:hover { color: #2a2a2a } #wrapperlicious a img { border: 0 } #wrapperlicious :not(pre) > code { color: inherit; background-color: rgba(0, 0, 0, 0.04); border-radius: 3px; font: 0.9em Consolas, Menlo, Monaco, monospace; padding: 0.3em; } #wrapperlicious dd { margin: 0; margin-left: 2em; } #wrapperlicious dt { color: #2a2a2a; font-weight: bold; margin-left: 0.9em; } #wrapperlicious p { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious li > p { margin-bottom: 0; margin-top: 0; } #wrapperlicious pre { border: 1px solid #c1c1c1; border-radius: 3px; font: 100% Consolas, Menlo, Monaco, monospace; margin-bottom: 1em; margin-top: 1em; } #wrapperlicious pre > code { display: block; background-color: #f6f6f6; font: 0.9em Consolas, Menlo, Monaco, monospace; line-height: 1.5em; text-align: left; white-space: pre; padding: 1em; } #wrapperlicious dl, #wrapperlicious ol, #wrapperlicious ul { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious ul { list-style-type: square; } #wrapperlicious ul ul { margin-bottom: 0px; margin-top: 0px; } #footer { font-size: 0.8em; padding-top: 0.5em; text-align: center; } #more { display: inline; font-size: 0.8em; } #perldocdiv { background-color: #fff; border: 1px solid #c1c1c1; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin-left: auto; margin-right: auto; padding: 3em; padding-top: 1em; max-width: 960px; } #moduleversion { float: right } #wrapperlicious .leading-notice { font-style: italic; padding-left: 1em; margin-top: 1em; margin-bottom: 1em; } #wrapperlicious .permalink { display: none; left: -0.75em; position: absolute; padding-right: 0.25em; text-decoration: none; } #wrapperlicious h1:hover .permalink, #wrapperlicious h2:hover .permalink, #wrapperlicious h3:hover .permalink, #wrapperlicious h4:hover .permalink, #wrapperlicious dt:hover .permalink { display: block; } </style> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KVNWBNT5FB"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KVNWBNT5FB'); gtag('config', 'UA-50555-3'); </script> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark justify-content-between"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="/"><img src="/images/perl_camel_30.png" width="30" height="30" class="d-inline-block align-top" alt="Perl Camel Logo"> Perldoc Browser</a> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-stable" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">5.12.3</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-stable"> <a class="dropdown-item" href="/perl592delta">Latest</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1/perl592delta">5.40.1</a> <a class="dropdown-item" href="/5.40.0/perl592delta">5.40.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3/perl592delta">5.38.3</a> <a class="dropdown-item" href="/5.38.2/perl592delta">5.38.2</a> <a class="dropdown-item" href="/5.38.1/perl592delta">5.38.1</a> <a class="dropdown-item" href="/5.38.0/perl592delta">5.38.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.36.3/perl592delta">5.36.3</a> <a class="dropdown-item" href="/5.36.2/perl592delta">5.36.2</a> <a class="dropdown-item" href="/5.36.1/perl592delta">5.36.1</a> <a class="dropdown-item" href="/5.36.0/perl592delta">5.36.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.34.3/perl592delta">5.34.3</a> <a class="dropdown-item" href="/5.34.2/perl592delta">5.34.2</a> <a class="dropdown-item" href="/5.34.1/perl592delta">5.34.1</a> <a class="dropdown-item" href="/5.34.0/perl592delta">5.34.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.32.1/perl592delta">5.32.1</a> <a class="dropdown-item" href="/5.32.0/perl592delta">5.32.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.30.3/perl592delta">5.30.3</a> <a class="dropdown-item" href="/5.30.2/perl592delta">5.30.2</a> <a class="dropdown-item" href="/5.30.1/perl592delta">5.30.1</a> <a class="dropdown-item" href="/5.30.0/perl592delta">5.30.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.28.3/perl592delta">5.28.3</a> <a class="dropdown-item" href="/5.28.2/perl592delta">5.28.2</a> <a class="dropdown-item" href="/5.28.1/perl592delta">5.28.1</a> <a class="dropdown-item" href="/5.28.0/perl592delta">5.28.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.26.3/perl592delta">5.26.3</a> <a class="dropdown-item" href="/5.26.2/perl592delta">5.26.2</a> <a class="dropdown-item" href="/5.26.1/perl592delta">5.26.1</a> <a class="dropdown-item" href="/5.26.0/perl592delta">5.26.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.24.4/perl592delta">5.24.4</a> <a class="dropdown-item" href="/5.24.3/perl592delta">5.24.3</a> <a class="dropdown-item" href="/5.24.2/perl592delta">5.24.2</a> <a class="dropdown-item" href="/5.24.1/perl592delta">5.24.1</a> <a class="dropdown-item" href="/5.24.0/perl592delta">5.24.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.22.4/perl592delta">5.22.4</a> <a class="dropdown-item" href="/5.22.3/perl592delta">5.22.3</a> <a class="dropdown-item" href="/5.22.2/perl592delta">5.22.2</a> <a class="dropdown-item" href="/5.22.1/perl592delta">5.22.1</a> <a class="dropdown-item" href="/5.22.0/perl592delta">5.22.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.20.3/perl592delta">5.20.3</a> <a class="dropdown-item" href="/5.20.2/perl592delta">5.20.2</a> <a class="dropdown-item" href="/5.20.1/perl592delta">5.20.1</a> <a class="dropdown-item" href="/5.20.0/perl592delta">5.20.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.18.4/perl592delta">5.18.4</a> <a class="dropdown-item" href="/5.18.3/perl592delta">5.18.3</a> <a class="dropdown-item" href="/5.18.2/perl592delta">5.18.2</a> <a class="dropdown-item" href="/5.18.1/perl592delta">5.18.1</a> <a class="dropdown-item" href="/5.18.0/perl592delta">5.18.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.16.3/perl592delta">5.16.3</a> <a class="dropdown-item" href="/5.16.2/perl592delta">5.16.2</a> <a class="dropdown-item" href="/5.16.1/perl592delta">5.16.1</a> <a class="dropdown-item" href="/5.16.0/perl592delta">5.16.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.14.4/perl592delta">5.14.4</a> <a class="dropdown-item" href="/5.14.3/perl592delta">5.14.3</a> <a class="dropdown-item" href="/5.14.2/perl592delta">5.14.2</a> <a class="dropdown-item" href="/5.14.1/perl592delta">5.14.1</a> <a class="dropdown-item" href="/5.14.0/perl592delta">5.14.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.12.5/perl592delta">5.12.5</a> <a class="dropdown-item" href="/5.12.4/perl592delta">5.12.4</a> <a class="dropdown-item active" href="/5.12.3/perl592delta">5.12.3</a> <a class="dropdown-item" href="/5.12.2/perl592delta">5.12.2</a> <a class="dropdown-item" href="/5.12.1/perl592delta">5.12.1</a> <a class="dropdown-item" href="/5.12.0/perl592delta">5.12.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.10.1/perl592delta">5.10.1</a> <a class="dropdown-item" href="/5.10.0/perl592delta">5.10.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.8.9/perl592delta">5.8.9</a> <a class="dropdown-item" href="/5.8.8/perl592delta">5.8.8</a> <a class="dropdown-item" href="/5.8.7/perl592delta">5.8.7</a> <a class="dropdown-item" href="/5.8.6/perl592delta">5.8.6</a> <a class="dropdown-item" href="/5.8.5/perl592delta">5.8.5</a> <a class="dropdown-item" href="/5.8.4/perl592delta">5.8.4</a> <a class="dropdown-item" href="/5.8.3/perl592delta">5.8.3</a> <a class="dropdown-item" href="/5.8.2/perl592delta">5.8.2</a> <a class="dropdown-item" href="/5.8.1/perl592delta">5.8.1</a> <a class="dropdown-item" href="/5.8.0/perl592delta">5.8.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.6.2/perl592delta">5.6.2</a> <a class="dropdown-item" href="/5.6.1/perl592delta">5.6.1</a> <a class="dropdown-item" href="/5.6.0/perl592delta">5.6.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.005_04/perl592delta">5.005_04</a> <a class="dropdown-item" href="/5.005_03/perl592delta">5.005_03</a> <a class="dropdown-item" href="/5.005_02/perl592delta">5.005_02</a> <a class="dropdown-item" href="/5.005_01/perl592delta">5.005_01</a> <a class="dropdown-item" href="/5.005/perl592delta">5.005</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-dev" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dev</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-dev"> <a class="dropdown-item" href="/blead/perl592delta">blead</a> <a class="dropdown-item" href="/5.41.10/perl592delta">5.41.10</a> <a class="dropdown-item" href="/5.41.9/perl592delta">5.41.9</a> <a class="dropdown-item" href="/5.41.8/perl592delta">5.41.8</a> <a class="dropdown-item" href="/5.41.7/perl592delta">5.41.7</a> <a class="dropdown-item" href="/5.41.6/perl592delta">5.41.6</a> <a class="dropdown-item" href="/5.41.5/perl592delta">5.41.5</a> <a class="dropdown-item" href="/5.41.4/perl592delta">5.41.4</a> <a class="dropdown-item" href="/5.41.3/perl592delta">5.41.3</a> <a class="dropdown-item" href="/5.41.2/perl592delta">5.41.2</a> <a class="dropdown-item" href="/5.41.1/perl592delta">5.41.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1-RC1/perl592delta">5.40.1-RC1</a> <a class="dropdown-item" href="/5.40.0-RC2/perl592delta">5.40.0-RC2</a> <a class="dropdown-item" href="/5.40.0-RC1/perl592delta">5.40.0-RC1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.39.10/perl592delta">5.39.10</a> <a class="dropdown-item" href="/5.39.9/perl592delta">5.39.9</a> <a class="dropdown-item" href="/5.39.8/perl592delta">5.39.8</a> <a class="dropdown-item" href="/5.39.7/perl592delta">5.39.7</a> <a class="dropdown-item" href="/5.39.6/perl592delta">5.39.6</a> <a class="dropdown-item" href="/5.39.5/perl592delta">5.39.5</a> <a class="dropdown-item" href="/5.39.4/perl592delta">5.39.4</a> <a class="dropdown-item" href="/5.39.3/perl592delta">5.39.3</a> <a class="dropdown-item" href="/5.39.2/perl592delta">5.39.2</a> <a class="dropdown-item" href="/5.39.1/perl592delta">5.39.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3-RC1/perl592delta">5.38.3-RC1</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-nav" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Documentation</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-nav"> <a class="dropdown-item" href="/5.12.3/perl">Perl</a> <a class="dropdown-item" href="/5.12.3/perlintro">Intro</a> <a class="dropdown-item" href="/5.12.3/perl#Tutorials">Tutorials</a> <a class="dropdown-item" href="/5.12.3/perlfaq">FAQs</a> <a class="dropdown-item" href="/5.12.3/perl#Reference-Manual">Reference</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.12.3/perlop">Operators</a> <a class="dropdown-item" href="/5.12.3/functions">Functions</a> <a class="dropdown-item" href="/5.12.3/variables">Variables</a> <a class="dropdown-item" href="/5.12.3/modules">Modules</a> <a class="dropdown-item" href="/5.12.3/perlutil">Utilities</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.12.3/perldelta">Release Notes</a> <a class="dropdown-item" href="/5.12.3/perlcommunity">Community</a> <a class="dropdown-item" href="/5.12.3/perlhist">History</a> </div> </li> </ul> <ul class="navbar-nav"> <script> function set_expand (expand) { var perldocdiv = document.getElementById('perldocdiv'); var width = window.getComputedStyle(perldocdiv).getPropertyValue('max-width'); var expanded = (width == '' || width == 'none') ? true : false; if (expand === null) { expand = !expanded; } if ((expand && !expanded) || (!expand && expanded)) { perldocdiv.style.setProperty('max-width', expand ? 'none' : '960px'); var button_classlist = document.getElementById('content-expand-button').classList; if (expand) { button_classlist.add('btn-light'); button_classlist.remove('btn-outline-light'); } else { button_classlist.add('btn-outline-light'); button_classlist.remove('btn-light'); } } return expand; } function toggle_expand () { var expand = set_expand(null); document.cookie = 'perldoc_expand=' + (expand ? 1 : 0) + '; path=/; expires=Tue, 19 Jan 2038 03:14:07 UTC'; } function read_expand () { return document.cookie.split(';').some(function (item) { return item.indexOf('perldoc_expand=1') >= 0 }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { if (read_expand()) { set_expand(true); } }); } else if (read_expand()) { set_expand(true); } </script> <button id="content-expand-button" type="button" class="btn btn-outline-light d-none d-lg-inline-block mr-4" onclick="toggle_expand()">Expand</button> </ul> <form class="form-inline" method="get" action="/5.12.3/search"> <input class="form-control mr-3" type="search" name="q" placeholder="Search" aria-label="Search" value=""> </form> </div> </nav> <div id="wrapperlicious" class="container-fluid"> <div id="perldocdiv"> <div id="links"> <a href="/5.12.3/perl592delta">perl592delta</a> <div id="more"> (<a href="/5.12.3/perl592delta.txt">source</a>, <a href="https://metacpan.org/pod/perl592delta">CPAN</a>) </div> </div> <div class="leading-notice"> You are viewing the version of this documentation from Perl 5.12.3. <a href="/perl592delta">View the latest version</a> </div> <h1><a id="toc">CONTENTS</a></h1> <ul> <li> <a class="text-decoration-none" href="#NAME">NAME</a> </li> <li> <a class="text-decoration-none" href="#DESCRIPTION">DESCRIPTION</a> </li> <li> <a class="text-decoration-none" href="#Incompatible-Changes">Incompatible Changes</a> <ul> <li> <a class="text-decoration-none" href="#Packing-and-UTF-8-strings">Packing and UTF-8 strings</a> </li> <li> <a class="text-decoration-none" href="#Miscellaneous">Miscellaneous</a> </li> </ul> </li> <li> <a class="text-decoration-none" href="#Core-Enhancements">Core Enhancements</a> <ul> <li> <a class="text-decoration-none" href="#Malloc-wrapping">Malloc wrapping</a> </li> <li> <a class="text-decoration-none" href="#Unicode-Character-Database-4.0.1">Unicode Character Database 4.0.1</a> </li> <li> <a class="text-decoration-none" href="#suidperl-less-insecure">suidperl less insecure</a> </li> <li> <a class="text-decoration-none" href="#PERLIO_DEBUG">PERLIO_DEBUG</a> </li> <li> <a class="text-decoration-none" href="#Formats">Formats</a> </li> <li> <a class="text-decoration-none" href="#Unicode-Character-Classes">Unicode Character Classes</a> </li> <li> <a class="text-decoration-none" href="#Byte-order-modifiers-for-pack()-and-unpack()">Byte-order modifiers for pack() and unpack()</a> </li> <li> <a class="text-decoration-none" href="#Byte-count-feature-in-pack()">Byte count feature in pack()</a> </li> <li> <a class="text-decoration-none" href="#New-variables">New variables</a> </li> </ul> </li> <li> <a class="text-decoration-none" href="#Modules-and-Pragmata">Modules and Pragmata</a> <ul> <li> <a class="text-decoration-none" href="#New-modules">New modules</a> </li> <li> <a class="text-decoration-none" href="#Updated-And-Improved-Modules-and-Pragmata">Updated And Improved Modules and Pragmata</a> </li> </ul> </li> <li> <a class="text-decoration-none" href="#Utility-Changes">Utility Changes</a> </li> <li> <a class="text-decoration-none" href="#Performance-Enhancements">Performance Enhancements</a> </li> <li> <a class="text-decoration-none" href="#Installation-and-Configuration-Improvements">Installation and Configuration Improvements</a> </li> <li> <a class="text-decoration-none" href="#Selected-Bug-Fixes">Selected Bug Fixes</a> </li> <li> <a class="text-decoration-none" href="#New-or-Changed-Diagnostics">New or Changed Diagnostics</a> </li> <li> <a class="text-decoration-none" href="#Changed-Internals">Changed Internals</a> </li> <li> <a class="text-decoration-none" href="#Known-Problems">Known Problems</a> </li> <li> <a class="text-decoration-none" href="#Plans-for-the-next-release">Plans for the next release</a> </li> <li> <a class="text-decoration-none" href="#Reporting-Bugs">Reporting Bugs</a> </li> <li> <a class="text-decoration-none" href="#SEE-ALSO">SEE ALSO</a> </li> </ul> <h1 id="NAME"><a class="permalink" href="#NAME">#</a>NAME</h1> <p>perl592delta - what is new for perl v5.9.2</p> <h1 id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">#</a>DESCRIPTION</h1> <p>This document describes differences between the 5.9.1 and the 5.9.2 development releases. See <a href="/5.12.3/perl590delta">perl590delta</a> and <a href="/5.12.3/perl591delta">perl591delta</a> for the differences between 5.8.0 and 5.9.1.</p> <h1 id="Incompatible-Changes"><a class="permalink" href="#Incompatible-Changes">#</a><a id="Incompatible"></a>Incompatible Changes</h1> <h2 id="Packing-and-UTF-8-strings"><a class="permalink" href="#Packing-and-UTF-8-strings">#</a><a id="Packing"></a>Packing and UTF-8 strings</h2> <p>The semantics of pack() and unpack() regarding UTF-8-encoded data has been changed. Processing is now by default character per character instead of byte per byte on the underlying encoding. Notably, code that used things like <code>pack(&quot;a*&quot;, $string)</code> to see through the encoding of string will now simply get back the original $string. Packed strings can also get upgraded during processing when you store upgraded characters. You can get the old behaviour by using <code>use bytes</code>.</p> <p>To be consistent with pack(), the <code>C0</code> in unpack() templates indicates that the data is to be processed in character mode, i.e. character by character; on the contrary, <code>U0</code> in unpack() indicates UTF-8 mode, where the packed string is processed in its UTF-8-encoded Unicode form on a byte by byte basis. This is reversed with regard to perl 5.8.X.</p> <p>Moreover, <code>C0</code> and <code>U0</code> can also be used in pack() templates to specify respectively character and byte modes.</p> <p><code>C0</code> and <code>U0</code> in the middle of a pack or unpack format now switch to the specified encoding mode, honoring parens grouping. Previously, parens were ignored.</p> <p>Also, there is a new pack() character format, <code>W</code>, which is intended to replace the old <code>C</code>. <code>C</code> is kept for unsigned chars coded as bytes in the strings internal representation. <code>W</code> represents unsigned (logical) character values, which can be greater than 255. It is therefore more robust when dealing with potentially UTF-8-encoded data (as <code>C</code> will wrap values outside the range 0..255, and not respect the string encoding).</p> <p>In practice, that means that pack formats are now encoding-neutral, except <code>C</code>.</p> <p>For consistency, <code>A</code> in unpack() format now trims all Unicode whitespace from the end of the string. Before perl 5.9.2, it used to strip only the classical ASCII space characters.</p> <h2 id="Miscellaneous"><a class="permalink" href="#Miscellaneous">#</a>Miscellaneous</h2> <p>The internal dump output has been improved, so that non-printable characters such as newline and backspace are output in <code>\x</code> notation, rather than octal.</p> <p>The <b>-C</b> option can no longer be used on the <code>#!</code> line. It wasn&#39;t working there anyway.</p> <h1 id="Core-Enhancements"><a class="permalink" href="#Core-Enhancements">#</a><a id="Core"></a>Core Enhancements</h1> <h2 id="Malloc-wrapping"><a class="permalink" href="#Malloc-wrapping">#</a><a id="Malloc"></a>Malloc wrapping</h2> <p>Perl can now be built to detect attempts to assign pathologically large chunks of memory. Previously such assignments would suffer from integer wrap-around during size calculations causing a misallocation, which would crash perl, and could theoretically be used for &quot;stack smashing&quot; attacks. The wrapping defaults to enabled on platforms where we know it works (most AIX configurations, BSDi, Darwin, DEC OSF/1, FreeBSD, HP-UX, GNU Linux, OpenBSD, Solaris, VMS and most Win32 compilers) and defaults to disabled on other platforms.</p> <h2 id="Unicode-Character-Database-4.0.1"><a class="permalink" href="#Unicode-Character-Database-4.0.1">#</a><a id="Unicode"></a>Unicode Character Database 4.0.1</h2> <p>The copy of the Unicode Character Database included in Perl 5.9 has been updated to 4.0.1 from 4.0.0.</p> <h2 id="suidperl-less-insecure"><a class="permalink" href="#suidperl-less-insecure">#</a><a id="suidperl"></a>suidperl less insecure</h2> <p>Paul Szabo has analysed and patched <code>suidperl</code> to remove existing known insecurities. Currently there are no known holes in <code>suidperl</code>, but previous experience shows that we cannot be confident that these were the last. You may no longer invoke the set uid perl directly, so to preserve backwards compatibility with scripts that invoke #!/usr/bin/suidperl the only set uid binary is now <code>sperl5.9.</code><i>n</i> (<code>sperl5.9.2</code> for this release). <code>suidperl</code> is installed as a hard link to <code>perl</code>; both <code>suidperl</code> and <code>perl</code> will invoke <code>sperl5.9.2</code> automatically the set uid binary, so this change should be completely transparent.</p> <p>For new projects the core perl team would strongly recommend that you use dedicated, single purpose security tools such as <code>sudo</code> in preference to <code>suidperl</code>.</p> <h2 id="PERLIO_DEBUG"><a class="permalink" href="#PERLIO_DEBUG">#</a>PERLIO_DEBUG</h2> <p>The <code>PERLIO_DEBUG</code> environment variable has no longer any effect for setuid scripts and for scripts run with <b>-T</b>.</p> <p>Moreover, with a thread-enabled perl, using <code>PERLIO_DEBUG</code> could lead to an internal buffer overflow. This has been fixed.</p> <h2 id="Formats"><a class="permalink" href="#Formats">#</a>Formats</h2> <p>In addition to bug fixes, <code>format</code>&#39;s features have been enhanced. See <a href="/5.12.3/perlform">perlform</a>.</p> <h2 id="Unicode-Character-Classes"><a class="permalink" href="#Unicode-Character-Classes">#</a><a id="Unicode1"></a>Unicode Character Classes</h2> <p>Perl&#39;s regular expression engine now contains support for matching on the intersection of two Unicode character classes. You can also now refer to user-defined character classes from within other user defined character classes.</p> <h2 id="Byte-order-modifiers-for-pack()-and-unpack()"><a class="permalink" href="#Byte-order-modifiers-for-pack()-and-unpack()">#</a><a id="Byte"></a><a id="Byte-order-modifiers-for-pack-and-unpack"></a>Byte-order modifiers for pack() and unpack()</h2> <p>There are two new byte-order modifiers, <code>&gt;</code> (big-endian) and <code>&lt;</code> (little-endian), that can be appended to most pack() and unpack() template characters and groups to force a certain byte-order for that type or group. See <a href="/5.12.3/perlfunc#pack">&quot;pack&quot; in perlfunc</a> and <a href="/5.12.3/perlpacktut">perlpacktut</a> for details.</p> <h2 id="Byte-count-feature-in-pack()"><a class="permalink" href="#Byte-count-feature-in-pack()">#</a><a id="Byte1"></a><a id="Byte-count-feature-in-pack"></a>Byte count feature in pack()</h2> <p>A new pack() template character, <code>&quot;.&quot;</code>, returns the number of characters read so far.</p> <h2 id="New-variables"><a class="permalink" href="#New-variables">#</a><a id="New"></a>New variables</h2> <p>A new variable, ${^RE_DEBUG_FLAGS}, controls what debug flags are in effect for the regular expression engine when running under <code>use re &quot;debug&quot;</code>. See <a href="/5.12.3/re">re</a> for details.</p> <p>A new variable ${^UTF8LOCALE} indicates where a UTF-8 locale was detected by perl at startup.</p> <h1 id="Modules-and-Pragmata"><a class="permalink" href="#Modules-and-Pragmata">#</a><a id="Modules"></a>Modules and Pragmata</h1> <h2 id="New-modules"><a class="permalink" href="#New-modules">#</a><a id="New1"></a>New modules</h2> <ul> <li><p><code>encoding::warnings</code>, by Audrey Tang, is a module to emit warnings whenever an ASCII character string containing high-bit bytes is implicitly converted into UTF-8.</p> </li> <li><p><code>Module::CoreList</code>, by Richard Clamp, is a small handy module that tells you what versions of core modules ship with any versions of Perl 5. It comes with a command-line frontend, <code>corelist</code>.</p> </li> </ul> <h2 id="Updated-And-Improved-Modules-and-Pragmata"><a class="permalink" href="#Updated-And-Improved-Modules-and-Pragmata">#</a><a id="Updated"></a>Updated And Improved Modules and Pragmata</h2> <p>Dual-lived modules have been updated to be kept up-to-date with respect to CPAN.</p> <p>The dual-lived modules which contain an <code>_</code> in their version number are actually <i>ahead</i> of the corresponding CPAN release.</p> <dl> <dt id="B::Concise"><a class="permalink" href="#B::Concise">#</a><a id="B"></a>B::Concise</dt> <dd> <p><code>B::Concise</code> was significantly improved.</p> </dd> <dt id="Socket"><a class="permalink" href="#Socket">#</a>Socket</dt> <dd> <p>There is experimental support for Linux abstract Unix domain sockets.</p> </dd> <dt id="Sys::Syslog"><a class="permalink" href="#Sys::Syslog">#</a><a id="Sys"></a>Sys::Syslog</dt> <dd> <p><code>syslog()</code> can now use numeric constants for facility names and priorities, in addition to strings.</p> </dd> <dt id="threads"><a class="permalink" href="#threads">#</a>threads</dt> <dd> <p>Detached threads are now also supported on Windows.</p> </dd> </dl> <h1 id="Utility-Changes"><a class="permalink" href="#Utility-Changes">#</a><a id="Utility"></a>Utility Changes</h1> <ul> <li><p>The <code>corelist</code> utility is now installed with perl (see <a href="#New-modules">&quot;New modules&quot;</a> above).</p> </li> <li><p><code>h2ph</code> and <code>h2xs</code> have been made a bit more robust with regard to &quot;modern&quot; C code.</p> </li> <li><p>Several bugs have been fixed in <code>find2perl</code>, regarding <code>-exec</code> and <code>-eval</code>. Also the options <code>-path</code>, <code>-ipath</code> and <code>-iname</code> have been added.</p> </li> <li><p>The Perl debugger can now save all debugger commands for sourcing later; notably, it can now emulate stepping backwards, by restarting and rerunning all bar the last command from a saved command history.</p> <p>It can also display the parent inheritance tree of a given class.</p> <p>Perl has a new -dt command-line flag, which enables threads support in the debugger.</p> </li> </ul> <h1 id="Performance-Enhancements"><a class="permalink" href="#Performance-Enhancements">#</a><a id="Performance"></a>Performance Enhancements</h1> <ul> <li><p>Unicode case mappings (<code>/i</code>, <code>lc</code>, <code>uc</code>, etc) are faster.</p> </li> <li><p><code>@a = sort @a</code> was optimized to do in-place sort. Likewise, <code>reverse sort ...</code> is now optimized to sort in reverse, avoiding the generation of a temporary intermediate list.</p> </li> <li><p>Unnecessary assignments are optimised away in</p> <pre><code>my $s = undef; my @a = (); my %h = ();</code></pre> </li> <li><p><code>map</code> in scalar context is now optimized.</p> </li> <li><p>The regexp engine now implements the trie optimization : it&#39;s able to factorize common prefixes and suffixes in regular expressions. A new special variable, ${^RE_TRIE_MAXBUF}, has been added to fine-tune this optimization.</p> </li> </ul> <h1 id="Installation-and-Configuration-Improvements"><a class="permalink" href="#Installation-and-Configuration-Improvements">#</a><a id="Installation"></a>Installation and Configuration Improvements</h1> <p>Run-time customization of @INC can be enabled by passing the <code>-Dusesitecustomize</code> flag to configure. When enabled, this will make perl run <i>$sitelibexp/sitecustomize.pl</i> before anything else. This script can then be set up to add additional entries to @INC.</p> <p>There is alpha support for relocatable @INC entries.</p> <p>Perl should build on Interix and on GNU/kFreeBSD.</p> <h1 id="Selected-Bug-Fixes"><a class="permalink" href="#Selected-Bug-Fixes">#</a><a id="Selected"></a>Selected Bug Fixes</h1> <p>Most of those bugs were reported in the perl 5.8.x maintenance track. Notably, quite a few utf8 bugs were fixed, and several memory leaks were suppressed. The perl58Xdelta manpages have more details on them.</p> <p>Development-only bug fixes include :</p> <p><code>$Foo::_</code> was wrongly forced as <code>$main::_</code>.</p> <h1 id="New-or-Changed-Diagnostics"><a class="permalink" href="#New-or-Changed-Diagnostics">#</a><a id="New2"></a>New or Changed Diagnostics</h1> <p>A new warning, <code>!=~ should be !~</code>, is emitted to prevent this misspelling of the non-matching operator.</p> <p>The warning <i>Newline in left-justified string</i> has been removed.</p> <p>The error <i>Too late for &quot;-T&quot; option</i> has been reformulated to be more descriptive.</p> <p>There is a new compilation error, <i>Illegal declaration of subroutine</i>, for an obscure case of syntax errors.</p> <p>The diagnostic output of Carp has been changed slightly, to add a space after the comma between arguments. This makes it much easier for tools such as web browsers to wrap it, but might confuse any automatic tools which perform detailed parsing of Carp output.</p> <p><code>perl -V</code> has several improvements, making it more useable from shell scripts to get the value of configuration variables. See <a href="/5.12.3/perlrun">perlrun</a> for details.</p> <h1 id="Changed-Internals"><a class="permalink" href="#Changed-Internals">#</a><a id="Changed"></a>Changed Internals</h1> <p>The perl core has been refactored and reorganised in several places. In short, this release will not be binary compatible with any previous perl release.</p> <h1 id="Known-Problems"><a class="permalink" href="#Known-Problems">#</a><a id="Known"></a>Known Problems</h1> <p>For threaded builds, <i>ext/threads/shared/t/wait.t</i> has been reported to fail some tests on HP-UX 10.20.</p> <p>Net::Ping might fail some tests on HP-UX 11.00 with the latest OS upgrades.</p> <p><i>t/io/dup.t</i>, <i>t/io/open.t</i> and <i>lib/ExtUtils/t/Constant.t</i> fail some tests on some BSD flavours.</p> <h1 id="Plans-for-the-next-release"><a class="permalink" href="#Plans-for-the-next-release">#</a><a id="Plans"></a>Plans for the next release</h1> <p>The current plan for perl 5.9.3 is to add CPANPLUS as a core module. More regular expression optimizations are also in the works.</p> <p>It is planned to release a development version of perl more frequently, i.e. each time something major changes.</p> <h1 id="Reporting-Bugs"><a class="permalink" href="#Reporting-Bugs">#</a><a id="Reporting"></a>Reporting Bugs</h1> <p>If you find what you think is a bug, you might check the articles recently posted to the comp.lang.perl.misc newsgroup and the perl bug database at http://bugs.perl.org/ . There may also be information at http://www.perl.org/ , the Perl Home Page.</p> <p>If you believe you have an unreported bug, please run the <b>perlbug</b> program included with your release. Be sure to trim your bug down to a tiny but sufficient test case. Your bug report, along with the output of <code>perl -V</code>, will be sent off to perlbug@perl.org to be analysed by the Perl porting team.</p> <h1 id="SEE-ALSO"><a class="permalink" href="#SEE-ALSO">#</a><a id="SEE"></a>SEE ALSO</h1> <p>The <i>Changes</i> file for exhaustive details on what changed.</p> <p>The <i>INSTALL</i> file for how to build Perl.</p> <p>The <i>README</i> file for general stuff.</p> <p>The <i>Artistic</i> and <i>Copying</i> files for copyright information.</p> </div> <div id="footer"> <p>Perldoc Browser is maintained by Dan Book (<a href="https://metacpan.org/author/DBOOK">DBOOK</a>). Please contact him via the <a href="https://github.com/Grinnz/perldoc-browser/issues">GitHub issue tracker</a> or <a href="mailto:dbook@cpan.org">email</a> regarding any issues with the site itself, search, or rendering of documentation.</p> <p>The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via the <a href="https://github.com/Perl/perl5/issues">Perl issue tracker</a>, the <a href="https://lists.perl.org/list/perl5-porters.html">mailing list</a>, or <a href="https://kiwiirc.com/client/irc.perl.org/p5p">IRC</a> to report any issues with the contents or format of the documentation.</p> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js" integrity="sha512-/DXTXr6nQodMUiq+IUJYCt2PPOUjrHJ9wFrqpJ3XkgPNOZVfMok7cRw6CSxyCQxXn6ozlESsSh1/sMCTF1rL/g==" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js" integrity="sha512-ubuT8Z88WxezgSqf3RLuNi5lmjstiJcyezx34yIU2gAHonIi27Na7atqzUZCOoY4CExaoFumzOsFQ2Ch+I/HCw==" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script> <script src="/js/highlight.pack.js"></script> <script>hljs.highlightAll();</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10