This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Re: Argument "1.23_45" isn't numeric in subroutine entry
[perl5.git] / INSTALL
diff --git a/INSTALL b/INSTALL
index 9568cda..c3c3c15 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -490,9 +490,9 @@ for you to use to distribute add-on modules.
 These are normally empty, but may be set as needed.  For example,
 a vendor might choose the following settings:
 
-       $prefix         /usr/bin
-       $siteprefix     /usr/local/bin
-       $vendorprefix   /usr/bin
+       $prefix         /usr
+       $siteprefix     /usr/local
+       $vendorprefix   /usr
 
 This would have the effect of setting the following:
 
@@ -719,19 +719,23 @@ line so that the hint files can make appropriate adjustments.
 
 The default is to compile without thread support.
 
-As of v5.5.64, perl has two different internal threads implementations.
-The 5.005 version (5005threads) and an interpreter-based implementation
-(ithreads) with one interpreter per thread.  By default, Configure selects
-ithreads if -Dusethreads is specified.  However, you can select the old
-5005threads behavior instead by either
+Perl has two different internal threads implementations.  The current
+model (available internally since 5.6, and as a user-level module
+since 5.8) is called interpreter-based implementation (ithreads),
+with one interpreter per thread, and explicit sharing of data.
 
-       sh Configure -Dusethreads -Duse5005threads
+The 5.005 version (5005threads) is considered obsolete, buggy, and
+unmaintained.
+
+By default, Configure selects ithreads if -Dusethreads is specified.
 
-or by
-       sh Configure -Dusethreads -Uuseithreads
+However, you can select the old 5005threads behavior
+
+       sh Configure -Dusethreads -Duse5005threads
 
-Eventually (by perl v5.6.0) this internal confusion ought to disappear,
-and these options may disappear as well.
+If you decide to use ithreads, the 'threads' module allows their use,
+and the 'Thread' module offers an interface to both 5005threads and
+ithreads (whichever has been configured).
 
 =head2 Large file support.
 
@@ -801,32 +805,30 @@ and the long double support.
 =head2 Selecting File IO mechanisms
 
 Previous versions of perl used the standard IO mechanisms as defined in
-stdio.h.  Versions 5.003_02 and later of perl allow alternate IO
+stdio.h.  Versions 5.003_02 and later of perl allowed alternate IO
 mechanisms via a "PerlIO" abstraction, but the stdio mechanism is still
 the default and is the only supported mechanism.
 
-This PerlIO abstraction can be enabled either on the Configure command
-line with
+Starting from Perl 5.8 the default mechanism is to use the PerlIO
+abstraction, because it allows better control of I/O mechanisms,
+instead of having to work with (often, work around) vendors' I/O
+implementations.
 
-       sh Configure -Duseperlio
+This PerlIO abstraction can be disabled either on the Configure
+command line with
 
-or interactively at the appropriate Configure prompt.
-
-If you choose to use the PerlIO abstraction layer, there are two
-(experimental) possibilities for the underlying IO calls.  These have been
-tested to some extent on some platforms, but are not guaranteed to work
-everywhere.
+       sh Configure -Uuseperlio
 
-=over 4
-
-=item 1.
+or interactively at the appropriate Configure prompt.
 
-AT&T's "sfio".  This has superior performance to stdio.h in many
-cases, and is extensible by the use of "discipline" modules.  Sfio
-currently only builds on a subset of the UNIX platforms perl supports.
-Because the data structures are completely different from stdio, perl
-extension modules or external libraries may not work.  This
-configuration exists to allow these issues to be worked on.
+With the PerlIO abstraction layer, there is another possibility for
+the underlying IO calls, AT&T's "sfio".  This has superior performance
+to stdio.h in many cases, and is extensible by the use of "discipline"
+modules ("Native" PerlIO has them too).  Sfio currently only builds on
+a subset of the UNIX platforms perl supports.  Because the data
+structures are completely different from stdio, perl extension modules
+or external libraries may not work.  This configuration exists to
+allow these issues to be worked on.
 
 This option requires the 'sfio' package to have been built and installed.
 The latest sfio is available from http://www.research.att.com/sw/tools/sfio/
@@ -846,24 +848,6 @@ Configure should detect this problem and warn you about problems with
 _exit vs. exit.  If you have this problem, the fix is to go back to
 your sfio sources and correct iffe's guess about atexit.
 
-=item 2.
-
-Normal stdio IO, but with all IO going through calls to the PerlIO
-abstraction layer.  This configuration can be used to check that perl and
-extension modules have been correctly converted to use the PerlIO
-abstraction.
-
-This configuration should work on all platforms (but might not).
-
-You select this option via:
-
-       sh Configure -Duseperlio -Uusesfio
-
-If you have already selected -Duseperlio, and if Configure does not
-detect sfio, then this will be the default suggested by Configure.
-
-=back
-
 =head2 SOCKS
 
 Perl can be configured to be 'socksified', that is, to use the SOCKS
@@ -878,7 +862,7 @@ your system supports it.  If you want to force perl to be compiled
 statically, you can either choose this when Configure prompts you or
 you can use the Configure command line option -Uusedl.
 
-=head2 Building a shared libperl.so Perl library
+=head2 Building a shared Perl library
 
 Currently, for most systems, the main perl executable is built by
 linking the "perl library" libperl.a with perlmain.o, your static
@@ -922,7 +906,10 @@ NeXTSTEP/OPENSTEP/Darwin, LIBRARY_PATH for BeOS, LD_LIBRARY_PATH/SHLIB_PATH
 for HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include
 the Perl build directory because that's where the shared libperl will
 be created.  Configure arranges makefile to have the correct shared
-library search settings.
+library search settings.  You can find the name of the environment
+variable Perl thinks works in your your system by
+
+       grep ldlibpthname config.sh
 
 However, there are some special cases where manually setting the
 shared library path might be required.  For example, if you want to run
@@ -943,7 +930,8 @@ for Bourne-style shells, or
    setenv LD_LIBRARY_PATH `pwd`
 
 for Csh-style shells.  (This procedure may also be needed if for some
-unexpected reason Configure fails to set up makefile correctly.)
+unexpected reason Configure fails to set up makefile correctly.) (And
+again, it may be something else than LD_LIBRARY_PATH for you, see above.)
 
 You can often recognize failures to build/use a shared libperl from error
 messages complaining about a missing libperl.so (or libperl.sl in HP-UX),
@@ -1624,16 +1612,6 @@ to
 then propagate your changes with B<sh Configure -S> and rebuild
 with B<make depend; make>.
 
-=item CRIPPLED_CC
-
-If you still can't compile successfully, try:
-
-       sh Configure -Accflags=-DCRIPPLED_CC
-
-This flag simplifies some complicated expressions for compilers that get
-indigestion easily.  (Just because you get no errors doesn't mean it
-compiled right!)
-
 =item Missing functions
 
 If you have missing routines, you probably need to add some library or
@@ -1747,14 +1725,12 @@ Genix may need to use libc rather than libc_s, or #undef VARARGS.
 
 NCR Tower 32 (OS 2.01.01) may need -W2,-Sl,2000 and #undef MKDIR.
 
-UTS may need one or more of -DCRIPPLED_CC, -K or -g, and undef LSTAT.
+UTS may need one or more of -K or -g, and undef LSTAT.
 
 FreeBSD can fail the lib/ipc_sysv.t test if SysV IPC has not been
 configured to the kernel.  Perl tries to detect this, though, and
 you will get a message telling what to do.
 
-If you get syntax errors on '(', try -DCRIPPLED_CC.
-
 Machines with half-implemented dbm routines will need to #undef I_ODBM
 
 HP-UX 11 Y2K patch "Y2K-1100 B.11.00.B0125 HP-UX Core OS Year 2000
@@ -1893,10 +1869,23 @@ individual subtests is to cd to the t directory and run
        ./perl harness
 
 (this assumes that most basic tests succeed, since harness uses
-complicated constructs).
+complicated constructs).  For extension and library tests you
+need a little bit more: you need to setup your environment variable
+PERL_CORE to a true value (like "1"), and you need to supply the
+right Perl library path:
 
+       setenv PERL_CORE 1
+       ./perl -I../lib ../ext/Socket/Socket.t
+       ./perl -I../lib ../lib/less.t
+
+(For csh-like shells on UNIX, adjust appropriately for other platforms.)
 You should also read the individual tests to see if there are any helpful
-comments that apply to your system.
+comments that apply to your system.  You may also need to setup your
+shared library path if you get errors like:
+
+       /sbin/loader: Fatal Error: cannot map libperl.so
+
+See L</"Building a shared Perl library"> earlier in this document.
 
 =over 4