- ActivePerl 5.8.0.806 - Release Notes
- Incompatibilities

- Binary incompatibility
- `binmode(FH)` may be required even on UNIX platforms
- New Unicode semantics (no more `use utf8`, almost)
- Incompatible, but reliable, signals implementation
- Perl debugger commands are different
- Attributes for `my` variables now handled at run-time
- References to references stringify as REF(...), not `SCALAR(...)`
- `glob()` now returns filenames in alphabetical order
- Time::Local::timelocal() and fractional seconds
- bless(REF, REF) no longer supported
- Self-ties are unsupported
- Tied hash methods EXISTS and DELETE are mandatory
- Perl hashes remain unordered, only differently so
- `use` may fail if module does not define a `$VERSION`
- chat2.pl has been removed
- `chdir('')` and `chdir(undef)` are deprecated
- `dump()` should now be spelled CORE::dump()
- Unimplemented POSIX regex features are now fatal
- `:raw` and `:crlf` disciplines no longer have inverse behaviors
- pack/unpack D/F recycled
- EQ, NE, LT, LE, GE, GT operators no longer part of the language
- tr///CU has been removed
- New warnings and deprecations

- Known Issues

- All Platforms
- Linux and Solaris
- Windows
- Further Information

- Reporting Problems

# ActivePerl 5.8.0.806 -- Release Notes

Welcome, and thanks for downloading ActivePerl. This release corresponds to Perl version 5.8.0.

Please note that ActivePerl 800 series builds are NOT binary-compatible with the older 600 and 500 series builds. In particular, do not attempt to use extensions or PPM packages built for the 600 and 500 series builds with ActivePerl 800 series builds and vice versa.

The following platforms are supported:

Linux x86 for Red Hat 6.2 or later

Linux x86 for Debian 2.2 or later

Solaris sparc for Solaris 2.6 or later

Windows x86 for Windows 9x, NT, Me, 2000 and XP

For a chronological list of changes included in this and past releases, see the ActivePerl Change Log.

# Incompatibilities

The following list is a general summary of the known incompatibilities between the Perl 5.8.0 source code release and earlier releases based on Perl 5.6.0. Be sure to consider these very carefully before upgrading.

## Binary incompatibility

Perl 5.8 is not binary compatible with earlier releases of Perl.

You have to recompile your XS modules.

Pure Perl modules should continue to work, subject to the other incompatibilities listed here.

## `binmode(FH)` may be required even on UNIX platforms

This change can break potentially working code on UNIX platforms. You may need to set `LC_ALL=C` in your environment to disable this new behavior. This is known to be the case on Red Hat Linux 8.0.

If your environment variables (LC_ALL, LC_CTYPE, LANG) look like you want to use UTF-8 (any of the variables match `/utf-?8/i`), your STDIN, STDOUT, STDERR handles and the default open layer (see open) are marked as UTF-8. This feature, like other new features that combine Unicode and I/O, work only if you are using PerlIO, but that's the default.

Note that after this Perl really does assume that everything is UTF-8: for example if some input handle is not, Perl will probably very soon complain about the input data like this ``Malformed UTF-8 ...'' since any old eight-bit data is not legal UTF-8.

Note for code authors: if you want to enable your users to use UTF-8 as their default encoding but in your code still have eight-bit I/O streams (such as images or zip files), you need to explicitly `open()` or `binmode()` with `:bytes` (see perlfunc/open and perlfunc/binmode), or you can just use `binmode(FH)` (nice for pre-5.8.0 backward compatibility).

## New Unicode semantics (no more `use utf8`, almost)

In general, the interfaces and implementation of Unicode support has changed significantly from the 5.6 release.

Previously in Perl 5.6 to use Unicode one would say ``use utf8'' and then the operations (like string concatenation) were Unicode-aware in that lexical scope.

This was found to be an inconvenient interface, and in Perl 5.8 the Unicode model has completely changed: now the ``Unicodeness'' is bound to the data itself, and for most of the time ``use utf8'' is not needed at all. The only remaining use of ``use utf8'' is when the Perl script itself has been written in the UTF-8 encoding of Unicode. (UTF-8 has not been made the default since there are many Perl scripts out there that are using various national eight-bit character sets, which would be illegal in UTF-8.)

See perluniintro for the explanation of the current model, and utf8 for the current use of the utf8 pragma.

## Incompatible, but reliable, signals implementation

The new safe signals implementation postpones handling of signals until it's safe (in between the execution of low level opcodes).

This change may have surprising side effects because signals no longer interrupt Perl instantly. Perl will now first finish whatever it was doing, like finishing an internal operation (such as `sort())` or an external operation (like an I/O operation), and only then look at any arrived signals (but before starting the next operation). This means that the signal handler may be called at a different point than before, conceivably when it is no longer useful. Note that breaking out from potentially blocking operations should still work, though.

## Perl debugger commands are different

The command line Perl debugger (`perl5db.pl`) has been modified to present a more consistent command interface. To use the old style commands, enter `o CommandSet=pre580` at the debugger prompt.

## Attributes for `my` variables now handled at run-time

The `my EXPR : ATTRS` syntax now applies variable attributes at run-time. (Subroutine and `our` variables still get attributes applied at compile-time.) See attributes for additional details. In particular, however, this allows variable attributes to be useful for `tie` interfaces, which was a deficiency of earlier releases. Note that the new semantics doesn't work with the Attribute::Handlers module (as of version 0.76).

## References to references stringify as REF(...), not `SCALAR(...)`

A reference to a reference now stringifies as ``REF(0x81485ec)'' instead of ``SCALAR(0x81485ec)'' in order to be more consistent with the return value of ref().

## `glob()` now returns filenames in alphabetical order

The list of filenames from `glob()` (or <...>) is now by default sorted alphabetically to be csh-compliant (which is what happened before in most UNIX platforms). (bsd_glob() continues to sort platform natively, ASCII or EBCDIC, unless GLOB_ALPHASORT is specified.)

This change was already included in Perl 5.6.1.

## Time::Local::timelocal() and fractional seconds

Time::Local::timelocal() does not handle fractional seconds anymore. The rationale is that neither does localtime(), and `timelocal()` and `localtime()` are supposed to be inverses of each other.

## bless(REF, REF) no longer supported

The semantics of bless(REF, REF) were unclear and until someone proves it to make some sense, it is forbidden.

## Self-ties are unsupported

Self-ties of arrays and hashes are no longer supported. Attempts to do this will cause fatal errors.

## Tied hash methods EXISTS and DELETE are mandatory

Tied hash interfaces are now required to have the EXISTS and DELETE methods (either own or inherited).

## Perl hashes remain unordered, only differently so

Although ``you shouldn't do that'', it was possible to write code that depends on Perl's hashed key order (Data::Dumper does this). The new algorithm ``One-at-a-Time'' produces a different hashed key order. More details are in perldelta, ``Performance Enhancements''.

## `use` may fail if module does not define a `$VERSION`

If you specify a required minimum version when loading a module with `use`, and that module does not define a $VERSION, a fatal error is produced.

## chat2.pl has been removed

The obsolete chat2 library that should never have been allowed to escape the laboratory has been decommissioned.

## `chdir('')` and `chdir(undef)` are deprecated

Using `chdir('')` or `chdir(undef)` instead of explicit `chdir()` is doubtful. A failure (think `chdir(some_function())` can lead into unintended `chdir()` to the home directory, therefore this behaviour is deprecated.

## `dump()` should now be spelled CORE::dump()

The builtin `dump()` function has probably outlived most of its usefulness. The core-dumping functionality remains available as an explicit call to `CORE::dump()`, but in future releases the behaviour of an unqualified `dump()` call may change.

## Unimplemented POSIX regex features are now fatal

The unimplemented POSIX regex features [[.cc.]] and [[=c=]] are still recognised but now cause fatal errors. The previous behaviour of ignoring them by default and warning if requested was unacceptable since it, in a way, falsely promised that the features could be used.

## `:raw` and `:crlf` disciplines no longer have inverse behaviors

Previous versions of perl and some readings of some sections of Camel III implied that the `:raw` ``discipline'' was the inverse of `:crlf`. Turning off ``clrfness'' is no longer enough to make a stream truly binary. So the PerlIO `:raw` layer (or ``discipline'', to use the Camel book's older terminology) is now formally defined as being equivalent to `binmode(FH)` - which is in turn defined as doing whatever is necessary to pass each byte as-is without any translation. In particular `binmode(FH)` - and hence `:raw` - will now turn off both CRLF and UTF-8 translation and remove other layers (e.g. :encoding()) which would modify byte stream.

## pack/unpack D/F recycled

The undocumented pack/unpack template letters D/F have been recycled for better use: now they stand for long double (if supported by the platform) and NV (Perl internal floating point type). (They used to be aliases for d/f, but you never knew that.)

## EQ, NE, LT, LE, GE, GT operators no longer part of the language

The long deprecated uppercase aliases for the string comparison operators (EQ, NE, LT, LE, GE, GT) have now been removed.

## tr///CU has been removed

The tr///C and tr///U features have been removed and will not return; the interface was a mistake. Sorry about that. For similar functionality, see pack('U0', ...) and pack('C0', ...).

This change was already included in Perl 5.6.1.

## New warnings and deprecations

The (bogus) escape sequences \8 and \9 now give an optional warning (``Unrecognized escape passed through''). There is no need to \-escape any `\w` character.

*glob{FILEHANDLE} is deprecated. Use *glob{IO} instead.

The `package;` syntax (`package` without an argument) has been deprecated. Its semantics were never that clear and its implementation even less so. If you have used that feature to disallow all but fully qualified variables, `use strict;` instead.

The current user-visible implementation of pseudo-hashes (the weird use of the first array element) is deprecated starting from Perl 5.8.0 and will be removed in Perl 5.10.0, and the feature will be implemented differently. Not only is the current interface rather ugly, but the current implementation slows down normal array and hash use quite noticeably. The `fields` pragma interface will remain available. The restricted hashes interface is expected to be the replacement interface (see the Hash::Util manpage). If your existing programs depends on the underlying implementation, consider using `Class::PseudoHash` from CPAN.

After years of trying, suidperl is considered to be too complex to ever be considered truly secure. The suidperl functionality is likely to be removed in a future release.

Earlier Perls treated ``sub foo (@bar)'' as equivalent to ``sub foo (@)''. The prototypes are now checked better at compile-time for invalid syntax. An optional warning is generated (``Illegal character in prototype...'') but this may be upgraded to a fatal error in a future release.

The `exec LIST` and `system LIST` operations now produce warnings on tainted data and in some future release they will produce fatal errors.

The existing behaviour when localising tied arrays and hashes is wrong, and will be changed in a future release, so do not rely on the existing behaviour.

The arguments of `WriteMakefile()` in Makefile.PL are now checked for sanity much more carefully than before. This may cause new warnings when modules are being installed. See the ExtUtils::MakeMaker manpage for more details.

Using arrays or hashes as references (e.g. `%foo->{bar}` has been deprecated for a while. Now these constructs will elicit an optional warning.

Use of the `/c` match modifier without an accompanying `/g` modifier elicits a new warning: `Use of /c modifier is meaningless without /g`.

Use of `/c` in substitutions, even with `/g`, elicits the `Use of /c modifier is meaningless in s///` warning.

Use of `/g` with `split` elicits the `Use of /g modifier is meaningless in split` warning.

Ambiguous ranges in the transliteration operator (such as `a-z-9`) now provoke warnings.

`push @a;` and `unshift @a;` (with no values to push or unshift) now produce a warning. This may be a problem for generated code.

Many other new warnings have been added (see perldelta for a complete list). All of them are optional, and are only enabled when running perl with the `-w` switch or with `use warnings`. Warnings can be suppressed in specific lexical scopes using `no warnings`.

# Known Issues

## All Platforms

The definitive summary of platform-independent changes and known issues in this release is available in perldelta and in the Change Log that comes with the ActivePerl distribution.

Only the significant known issues from perldelta are listed here.

The Compiler Suite Is Still Very Experimental
  The compiler suite is slowly getting better but it continues to be highly experimental. Use in production environments is discouraged.

Localising Tied Arrays and Hashes Is Broken

          local %tied_array;

  doesn't work as one would expect: the old value is restored incorrectly. This will be changed in a future release, but we don't know yet what the new semantics will exactly be. In any case, the change will break existing code that relies on the current (ill-defined) semantics, so just avoid doing this in general.

Self-tying Problems
  Self-tying of arrays and hashes is broken in rather deep and hard-to-fix ways. As a stop-gap measure to avoid people from getting frustrated at the mysterious results (core dumps, most often), it is forbidden for now (you will get a fatal error even from an attempt).

  A change to self-tying of globs has caused them to be recursively referenced (see: perlobj, ``Two-Phased Garbage Collection''). You will now need an explicit untie to destroy a self-tied glob. This behaviour may be fixed at a later date.

  Self-tying of scalars and IO objects works.

Tied/Magical Array/Hash Elements Do Not Autovivify
  For normal arrays `$foo = \$bar[1]` will assign `undef` to `$bar[1]` (assuming that it didn't exist before), but for tied/magical arrays and hashes such autovivification does not happen because there is currently no way to catch the reference creation. The same problem affects slicing over non-existent indices/keys of a tied/magical array/hash.

Unicode in package/class and subroutine names does not work
  One can have Unicode in identifier names, but not in package/class or subroutine names. While some limited functionality towards this does exist as of Perl 5.8.0, that is more accidental than designed; use of Unicode for the said purposes is unsupported.

  One reason for this incompleteness is its (currently) inherent non-portability: since both package names and subroutine names may need to be mapped to file and directory names, the Unicode capability of the filesystem becomes important, and there unfortunately aren't portable answers.

## Linux and Solaris

Some versions of tar on Solaris have bugs that prevent proper extraction of files in a package that has long path names. Most other versions of tar on Solaris use a different method than GNU tar to encode pathnames longer than 100 characters. GNU tar is therefore required to extract the package into the filesystem correctly. A precompiled version of GNU tar for the sparc platform is available from:

        http://www.sunfreeware.com/

You can also get the source package for GNU tar from:

        http://www.gnu.org/

The suidperl executable is not included in this package due to potential security issues. If you wish to use suidperl in your installation, we recommend building Perl from source. The source code for ActivePerl is available at:

        http://www.ActiveState.com

## Windows

ActivePerl depends on MSVCRT.DLL being installed on the target system. This file ships with all versions of Windows except for Windows 95. If you do not have this file installed on your system you may experience problems installing and/or running components within ActivePerl.

You can download a self extracting executable that contains MSVCRT.DLL from:

        ftp://ftp.microsoft.com/softlib/mslfiles/msvcrt.exe

Save the file in a temporary directory and double click on it to extract the files. Follow the instructions in the ReadMe.txt file contained in the package in order to install the missing file.

The `fork()` emulation has known limitations. See perlfork for a detailed summary. In particular, `fork()` emulation will not work correctly with extensions that are either not thread-safe, or maintain internal state that cannot be cloned in the psuedo-child process. This caveat currently applies to extensions such as Tk and Storable.

It seems that some people are having problems with the ActivePerl MSI installer.

The first thing to note is that you CANNOT install ActivePerl 5.8 over an older version of ActivePerl based on 5.6 or 5.005, such as build 633 or any other 600 or 500 series build.

We have determined that one cause of this error message is due to other installations of Perl that may be pointed at by something in the environment.

Workaround

The sure-fire solution is to make absolutely certain that no other installations of Perl are on the target machine. Realizing that this is not always possible, you can follow these steps to ensure the other installations will not interfere.

1) Stop the ``Windows Installer'' service. This can be accomplished from the command prompt using the following command:

        c:\> net stop "Windows Installer"

2) Temporarily remove or rename PERLLIB and PERL5LIB environment variables in the system environment.

3) Temporarily remove or rename the following registry values:

        [\\HKEY_LOCAL_MACHINE\Software\Perl] lib = <directory> (REG_SV)
        [\\HKEY_LOCAL_MACHINE\Software\Perl] sitelib = <directory> (REG_SV)
        [\\HKEY_LOCAL_MACHINE\Software\Perl] lib-<PerlVersion> = <directory> (REG_SV)
        [\\HKEY_LOCAL_MACHINE\Software\Perl] sitelib-<PerlVersion> = <directory>(REG_SV)

4) Proceed with the installation.

Once the installation has completed successfully, the above actions may be undone although restoring the environment variables or the registry values may interfere with the proper operation of your new ActivePerl installation.

In order to perform all of the above steps, you will need to have Administrative privileges on the target machine. If you do not have the required privileges you should contact you Administrator.

Norton AntiVirus 2000 detects VBS.NewLove.A in the file ActivePerl-Winfaq12.html.

Workaround

This is a false positive by Norton AntiVirus. ActivePerl-Winfaq12.html has been examined by hand, and it is likely that the following example code is what causes the false report.

        <BLOCKQUOTE>
        <P><CODE>use strict;<BR>
          use Win32::OLE;<BR>
          use Win32::OLE::Const 'Microsoft Outlook';<BR>
          <BR>
          my $Outlook = Win32::OLE-&gt;new('Outlook.Application', 'Quit');<BR>
          my $ol = Win32::OLE::Const-&gt;Load($Outlook);<BR>
          <BR>
          my $namespace = $Outlook-&gt;GetNamespace(&quot;MAPI&quot;);<BR>
          my $Folder = $namespace-&gt;GetDefaultFolder(olFolderInbox);<BR>
          my $NewFolder = $Folder-&gt;Folders-&gt;Add(&quot;Test1&quot;);</CODE></P>
        </BLOCKQUOTE>

This can be tested by removing the above code from the ActivePerl-Winfaq12.html file and rescanning with Norton AntiVirus. Norton AntiVirus will no longer detect VBS.NewLove.A.

Symantec has been notified of this issue.

The following Microsoft knowledge base articles may be helpful in solving MSI problems:

Q236597 - OFF2000: Error Message: The Installation Package Could Not Be Opened ... http://support.microsoft.com/support/kb/articles/Q236/5/97.ASP

Q224094 - OFF2000: Error Message: This Application Requires the Windows Installer to Run http://support.microsoft.com/support/kb/articles/Q224/0/94.ASP

Q247532 - Works 2000 Err Msg: Installer Terminated Prematurely http://support.microsoft.com/support/kb/articles/Q247/5/32.ASP

``Error 1303. The installer has insufficient privileges...'' Running Office Setup http://support.microsoft.com/support/kb/articles/Q228/6/58.ASP

Error Message: Error 1316 Running Setup for Admin Installation http://support.microsoft.com/support/kb/articles/Q228/5/92.ASP

Error 1327 Invalid Drive During Office Installation http://support.microsoft.com/support/kb/articles/Q217/6/66.ASP

On Windows 9x, the system must be rebooted for the PATH environment variable to take effect.

On Windows 9x, the PATH environment variable settings are not removed after an uninstall.

## Further Information

The Perl distribution comes with extensive documentation. On Unix platforms, all the standard documentation is installed as man pages under the Perl install location. The location of the man pages may need to be added to the MANPATH environment variable in order to access them. For example, in the C shell:

        % setenv MANPATH /usr/local/ActivePerl-5.8/man:$MANPATH

The documentation is installed in HTML format on all platforms. If ActivePerl was installed in /usr/local/ActivePerl-5.8 then the HTML documentation would be located in /usr/local/ActivePerl-5.8/html.

On Windows, the standard documentation along with Windows-specific Perl documentation is installed in HTML format, and is accessible from the ``Start'' menu.

Updated versions of the HTML documentation will always be available at the ActiveState website:

        http://www.ActiveState.com/ActivePerl/

# Reporting Problems

Please report any problems you encounter with this release at the following location:

        http://bugs.ActiveState.com/ActivePerl/

If you do not have web access, reports can be also sent via email to ActivePerl-Bugs@ActiveState.com. Please be sure to include detailed information about the platform in your message.

As far as possible, please ensure that there is enough information in the report to reproduce the bug elsewhere. It also helps to submit a minimal test case that exhibits the bug.