Improved $^X patch
Paul Green [Thu, 30 May 2002 17:32:00 +0000 (13:32 -0400)]
Message-Id: <200205302132.RAA18437@mailhub1.stratus.com>

p4raw-id: //depot/perl@16912

Configure
Porting/Glossary
Porting/config.sh
Porting/config_H
pod/perlport.pod
pod/perlvar.pod

index a419c6e..87275ce 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -20,7 +20,7 @@
 
 # $Id: Head.U,v 3.0.1.9 1997/02/28 15:02:09 ram Exp $
 #
-# Generated on Thu May 30 16:44:56 EET DST 2002 [metaconfig 3.0 PL70]
+# Generated on Fri May 31 05:20:00 EET DST 2002 [metaconfig 3.0 PL70]
 # (with additional metaconfig patches by perlbug@perl.org)
 
 cat >c1$$ <<EOF
index f2d71b9..0d18d49 100644 (file)
@@ -3603,7 +3603,13 @@ perllibs (End.U):
 perlpath (perlpath.U):
        This variable contains the eventual value of the PERLPATH symbol,
        which contains the name of the perl interpreter to be used in
-       shell scripts and in the "eval 'exec'" idiom.
+       shell scripts and in the "eval 'exec'" idiom.  This variable is
+       not necessarily the pathname of the file containing the perl
+       interpreter; you must append the executable extension (_exe) if
+       it is not already present.  Note that Perl code that runs during
+       the Perl build process cannot reference this variable, as Perl
+       may not have been installed, or even if installed, may be a
+       different version of Perl.
 
 pg (Loc.U):
        This variable is used internally by Configure to determine the
index 1f04fb3..bdc080a 100644 (file)
@@ -8,7 +8,7 @@
 
 # Package name      : perl5
 # Source directory  : .
-# Configuration time: Tue May 28 23:24:18 EET DST 2002
+# Configuration time: Fri May 31 05:21:28 EET DST 2002
 # Configured by     : jhi
 # Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
 
@@ -63,7 +63,7 @@ ccsymbols='__alpha=1 __LANGUAGE_C__=1 __osf__=1 __unix__=1 _LONGLONG=1 _SYSTYPE_
 ccversion='V5.6-082'
 cf_by='jhi'
 cf_email='yourname@yourhost.yourplace.com'
-cf_time='Tue May 28 23:24:18 EET DST 2002'
+cf_time='Fri May 31 05:21:28 EET DST 2002'
 charsize='1'
 chgrp=''
 chmod='chmod'
@@ -769,7 +769,7 @@ patchlevel='8'
 path_sep=':'
 perl5='perl'
 perl=''
-perl_patchlevel='16824'
+perl_patchlevel='16892'
 perladmin='yourname@yourhost.yourplace.com'
 perllibs='-lm -lutil'
 perlpath='/opt/perl/bin/perl'
@@ -953,7 +953,7 @@ vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
 version='5.8.0'
-version_patchlevel_string='version 8 subversion 0 patch 16824'
+version_patchlevel_string='version 8 subversion 0 patch 16892'
 versiononly='undef'
 vi=''
 voidflags='15'
@@ -982,7 +982,7 @@ PERL_SUBVERSION=0
 PERL_API_REVISION=5
 PERL_API_VERSION=8
 PERL_API_SUBVERSION=0
-PERL_PATCHLEVEL=16824
+PERL_PATCHLEVEL=16892
 PERL_CONFIG_SH=true
 # Variables propagated from previous config.sh file.
 pp_sys_cflags='ccflags="$ccflags -DNO_EFF_ONLY_OK"'
index 960fc9d..6bb15c5 100644 (file)
@@ -17,7 +17,7 @@
 /*
  * Package name      : perl5
  * Source directory  : .
- * Configuration time: Tue May 28 23:24:18 EET DST 2002
+ * Configuration time: Fri May 31 05:21:28 EET DST 2002
  * Configured by     : jhi
  * Target system     : osf1 alpha.hut.fi v4.0 878 alpha 
  */
index cc02b32..2b4d3d9 100644 (file)
@@ -448,6 +448,36 @@ directories.
 
 Don't count on specific values of C<$!>.
 
+=head2 Command names versus file pathnames
+
+Don't assume that the name used to invoke a command or program with
+C<system> or C<exec> can also be used to test for the existence of the
+file that holds the executable code for that command or program.
+First, many operating systems have "internal" commands that are
+built-in to the OS and while these commands can be invoked, there is
+no corresponding file.  Second, some operating systems (Cygwin, DJGPP,
+OS/2, and VOS) have required suffixes for executable files; these
+suffixes are generally permitted on the command name but are not
+required.  Thus, a command like "perl" might exist in a file named
+"perl", "perl.exe", or "perl.pm", depending on the operating system.
+The variable "_exe" in the Config module holds the executable suffix,
+if any.  Third, VMS files always end in a version number, which comes
+after the executable suffix.
+
+To convert $^X to a file pathname, taking account of the requirements
+of the various operating system possibilities, say:
+  use Config;
+  use File::Spec;
+  $thisperl = $^X;
+  $thisperl .= $Config{_exe} unless $thisperl ~= m/$Config{_exe}([;\d]*)$/i;
+
+To convert $Config{perlpath} to a file pathname, say:
+
+  use Config;
+  use File::Spec;
+  $thisperl = File::Spec->canonpath($Config{perlpath});
+  $thisperl .= $Config{_exe} unless $thisperl ~= m/$Config{_exe}([;\d]*)$/i;
+
 =head2 Interprocess Communication (IPC)
 
 In general, don't directly access the system in code meant to be
index bf1d765..9f23dcf 100644 (file)
@@ -1158,7 +1158,8 @@ a relative or absolute pathname of the perl program file, or may
 be the string used to invoke perl but not the pathname of the
 perl program file.  Also, most operating systems permit invoking
 programs that are not in the PATH environment variable, so there
-is no guarantee that the value of $^X is in PATH.
+is no guarantee that the value of $^X is in PATH.  For VMS, the
+value may or may not include a version number.
 
 You usually can use the value of $^X to re-invoke an independent
 copy of the same perl that is currently running, e.g.,
@@ -1179,8 +1180,8 @@ following statements:
   use Config;
   use File::Spec;
   $this_perl = File::Spec->canonpath($^X);
-  $this_perl .= $Config{exe_ext}
-          unless $this_perl =~ m/$Config{exe_ext}$/i;
+  $this_perl .= $Config{_ext}
+          unless $this_perl =~ m/$Config{_ext}([;\d]*)$/i;
 
 Because many operating systems permit anyone with read access to
 the Perl program file to make a copy of it, patch the copy, and
@@ -1193,8 +1194,8 @@ command or referenced as a file.
   use Config;
   use File::Spec;
   $secure_perl_path = File::Spec->canonpath($Config{perlpath});
-  $secure_perl_path .= $Config{exe_ext}
-          unless $secure_perl_path =~ m/$Config{exe_ext}$/i;
+  $secure_perl_path .= $Config{_ext}
+          unless $secure_perl_path =~ m/$Config{_ext}([;\d]*)$/i;
 
 =item ARGV