binmode(FH)
may be required even on UNIX platformsuse utf8
, almost)my
variables now handled at run-timeSCALAR(...)
glob()
now returns filenames in alphabetical orderuse
may fail if module does not define a $VERSION
chdir('')
and chdir(undef)
are deprecateddump()
should now be spelled CORE::dump():raw
and :crlf
disciplines no longer have inverse behaviors
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:
For a chronological list of changes included in this and past releases, see the ActivePerl Change Log.
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.
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 platformsThis 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).
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.
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.
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.
my
variables now handled at run-timeThe 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).
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 orderThe 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() 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.
The semantics of bless(REF, REF) were unclear and until someone proves it to make some sense, it is forbidden.
Self-ties of arrays and hashes are no longer supported. Attempts to do this will cause fatal errors.
Tied hash interfaces are now required to have the EXISTS and DELETE methods (either own or inherited).
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.
The obsolete chat2 library that should never have been allowed to escape the laboratory has been decommissioned.
chdir('')
and chdir(undef)
are deprecatedUsing 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.
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 behaviorsPrevious 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.
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.)
The long deprecated uppercase aliases for the string comparison operators (EQ, NE, LT, LE, GE, GT) have now 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.
\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.
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
.
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.
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.
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.
$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.
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.
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
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.
Thefork()
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 numerous people are being bitten by this error from the
ActivePerl MSI installer. The full text of the error message probably looks
something lke this:
Installer Information Internal Error 2744. PPM_CONFI, C:\perl\bin. "C:\Perl\bin\wPerl.exe" "C:\Perlbin\configPPM.pl" "C:\Perl\site\lib\ppm.xml" "D:\downloads\perl\\" "C:\Perl\site\lib\ppm.xml~"
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.
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/
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.