ActivePerl 5.8.4.810 -- Release Notes
    Welcome, and thanks for downloading ActivePerl. This release corresponds
    to Perl version 5.8.4.

    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, XP and 2003

    For a chronological list of changes included in this and past releases,
    see the ActivePerl 5.8 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.

    Please check perl581delta, perl582delta and perl583delta for additional
    incompatible changes made in Perl 5.8.1, Perl 5.8.2 and Perl 5.8.3
    respectively. There are a few new incompatibilities, but also mechanisms
    to better control some of the incompatibilities introduced by Perl
    5.8.0. For example, filehandles are no longer automatically set to UTF-8
    by locale settings.

  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.

  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 perl58delta, "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
            Hash::Util). 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
            ExtUtils::MakeMaker 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 perl58delta 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 perl58delta, perl581delta, perldelta and
    in the Change Log that comes with the ActivePerl distribution.

    Only the significant known issues from perl58delta 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.

