home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2004 November
/
PCWorld_2004-11_cd.bin
/
software
/
topware
/
activeperl
/
ActivePerl-5.8.4.810-MSWin32-x86.exe
/
ActivePerl-5.8.4.810
/
RELEASE.txt
< prev
Wrap
Text File
|
2004-06-01
|
24KB
|
499 lines
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->new('Outlook.Application', 'Quit');<BR>
my $ol = Win32::OLE::Const->Load($Outlook);<BR>
<BR>
my $namespace = $Outlook->GetNamespace("MAPI");<BR>
my $Folder = $namespace->GetDefaultFolder(olFolderInbox);<BR>
my $NewFolder = $Folder->Folders->Add("Test1");</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.