| 1 | Perl/iX for HP 3000 MPE |
| 2 | |
| 3 | http://www.cccd.edu/~markb/perlix.html |
| 4 | Perl language for MPE |
| 5 | Last updated July 15, 1998 @ 2030 UTC |
| 6 | |
| 7 | ------------------------------------------------------------------------ |
| 8 | |
| 9 | What's New |
| 10 | |
| 11 | * July 15, 1998 |
| 12 | o Changed startperl to #!/PERL/PUB/perl so that Perl will recognize |
| 13 | scripts more easily and efficiently. |
| 14 | * July 8, 1998 |
| 15 | o Updated to version 5.004_70 (internal developer release) which is |
| 16 | now MPE-ready. The next public freeware release of Perl should |
| 17 | compile "straight out of the box" on MPE. Note that this version |
| 18 | of Perl/iX was strictly internal to me and never publicly |
| 19 | released. Note that BIND/iX is now required (well, the include |
| 20 | files and libbind.a) if you wish to compile Perl/iX. |
| 21 | * November 6, 1997 |
| 22 | o Updated to version 5.004_04. No changes in MPE-specific |
| 23 | functionality. |
| 24 | |
| 25 | ------------------------------------------------------------------------ |
| 26 | |
| 27 | Welcome |
| 28 | |
| 29 | This is the official home page for the HP 3000 MPE port of the Perl |
| 30 | scripting language which gives you all of the power of C, awk, sed, and sh |
| 31 | in a single language. Check here for the latest news, implemented |
| 32 | functionality, known bugs, to-do list, etc. Status reports about major |
| 33 | milestones will also be posted to the HP3000-L mailing list and its |
| 34 | associated gatewayed newsgroup comp.sys.hp.mpe. |
| 35 | |
| 36 | I'm doing this port because I can't live without Perl on the HPUX machines |
| 37 | that I administer for the Coast Community College District, and I want to |
| 38 | have the same power available to me on MPE. |
| 39 | |
| 40 | Please send your comments, questions, and bug reports directly to me, Mark |
| 41 | Bixby, by e-mailing to markb@cccd.edu. Or just post them to HP3000-L. You |
| 42 | can also telephone me at +1 714 438-4647 Monday-Friday 0815-1745 PDT |
| 43 | (1615-0145 UTC). |
| 44 | |
| 45 | The platform I'm using to do this port is an HP 3000 969KS200 running |
| 46 | MPE/iX 5.5 and using the gcc 2.8 compiler from |
| 47 | http://www.interex.org/sources/freeware.html. |
| 48 | |
| 49 | The combined porting wisdom from all of my ports can be found in my MPE/iX |
| 50 | Porting Guide. |
| 51 | |
| 52 | ------------------------------------------------------------------------ |
| 53 | |
| 54 | System Requirements |
| 55 | |
| 56 | * MPE/iX 5.5 or later. This version of Perl/iX does NOT run on MPE/iX |
| 57 | 5.0 or earlier, nor does it run on "classic" MPE/V machines. |
| 58 | * The Perl binary requires that you must have converted your NMRL |
| 59 | libraries in /lib/lib*.a and /usr/lib/lib*.a to NMXL libraries |
| 60 | /lib/lib*.sl and /usr/lib/lib*.sl via the LIBSHP3K script that comes |
| 61 | with the GNUCORE portion of the FREEWARE tape. |
| 62 | * If you wish to recompile Perl, you must install both GNUCORE and |
| 63 | GNUGCC from the FREEWARE tape. |
| 64 | * Perl/iX will be happier if you install the MPEKX76A additional POSIX |
| 65 | filename characters patch, but this is optional. |
| 66 | * If you will be compiling Perl/iX yourself, you will also need the |
| 67 | /BIND/PUB/include and /BIND/PUB/lib portions of BIND/iX. |
| 68 | |
| 69 | ------------------------------------------------------------------------ |
| 70 | |
| 71 | Demos |
| 72 | |
| 73 | Here is a brief selection of some sample Perl/iX uses: |
| 74 | |
| 75 | * A web feedback CGI form that lets a web browser user enter some data |
| 76 | and send e-mail to the person responsible for reading the feedback |
| 77 | comments. The CGI is written in Perl and requires Sendmail/iX. |
| 78 | |
| 79 | ------------------------------------------------------------------------ |
| 80 | |
| 81 | How to Obtain Perl/iX |
| 82 | |
| 83 | 1. Download Perl using either FTP.ARPA.SYS or some other client |
| 84 | 2. Extract the installation script |
| 85 | 3. Edit the installation script |
| 86 | 4. Run the installation script |
| 87 | |
| 88 | Download Perl using FTP.ARPA.SYS from your HP 3000 (the preferred |
| 89 | method)..... |
| 90 | |
| 91 | :HELLO MANAGER.SYS |
| 92 | :XEQ FTP.ARPA.SYS |
| 93 | open ftp.cccd.edu |
| 94 | anonymous |
| 95 | your@email.address |
| 96 | bytestream |
| 97 | cd /pub/mpe |
| 98 | get perl5.005.tar.Z /tmp/perl.tar.Z |
| 99 | exit |
| 100 | |
| 101 | .....Or download using some other generic web or ftp client (the alternate |
| 102 | method) |
| 103 | |
| 104 | Download the following files (make sure that you use "binary mode" or |
| 105 | whatever client feature that is 8-bit clean): |
| 106 | |
| 107 | * Perl from http://www.cccd.edu/ftp/pub/mpe/perl5.005.tar.Z or |
| 108 | ftp://ftp.cccd.edu/pub/mpe/perl5.005.tar.Z |
| 109 | |
| 110 | Upload those files to your HP 3000 in an 8-bit clean bytestream manner to: |
| 111 | |
| 112 | * /tmp/perl.tar.Z |
| 113 | |
| 114 | Then extract the installation script (after both download methods) |
| 115 | |
| 116 | :CHDIR /tmp |
| 117 | :XEQ TAR.HPBIN.SYS 'xvfopz /tmp/perl.tar.Z INSTALL' |
| 118 | |
| 119 | Edit the installation script |
| 120 | |
| 121 | Examine the accounting structure creation commands and modify if necessary |
| 122 | (adding additional capabilities, choosing a non-system volume set, etc). |
| 123 | |
| 124 | :XEQ VI.HPBIN.SYS /tmp/INSTALL |
| 125 | |
| 126 | Run the installation script |
| 127 | |
| 128 | The accounting structure will be created and then all files will be |
| 129 | extracted from the archive. |
| 130 | |
| 131 | :XEQ SH.HPBIN.SYS /tmp/INSTALL |
| 132 | |
| 133 | ------------------------------------------------------------------------ |
| 134 | |
| 135 | Distribution Contents Highlights |
| 136 | |
| 137 | README |
| 138 | The file you're reading now. |
| 139 | INSTALL |
| 140 | Perl/iX Installation script. |
| 141 | PERL |
| 142 | Perl NMPRG executable. A version-numbered backup copy also exists. |
| 143 | You might wish to "ln -s /PERL/PUB/PERL /usr/local/bin/perl". |
| 144 | lib/ |
| 145 | Perl libraries, both core and add-on. |
| 146 | man/ |
| 147 | Perl man page documentation. |
| 148 | public_html/feedback.cgi |
| 149 | Sample feedback CGI form written in Perl. |
| 150 | src/perl5.005 |
| 151 | Source code. |
| 152 | |
| 153 | ------------------------------------------------------------------------ |
| 154 | |
| 155 | How to Compile Perl/iX |
| 156 | |
| 157 | 1. cd src/perl5.005 |
| 158 | 2. Read the INSTALL file for the official instructions |
| 159 | 3. ./Configure |
| 160 | 4. make |
| 161 | 5. ./mpeix/relink |
| 162 | 6. make test (expect 31 out of 5899 subtests to fail, mostly due to MPE |
| 163 | not supporting hard links and handling exit() return codes improperly) |
| 164 | 7. make install |
| 165 | 8. Optionally create symbolic links that point to the Perl executable, |
| 166 | i.e. ln -s /usr/local/bin/perl /PERL/PUB/PERL |
| 167 | |
| 168 | The summary test results from "cd t; ./perl -I../lib harness": |
| 169 | |
| 170 | Failed Test Status Wstat Total Fail Failed List of failed |
| 171 | ------------------------------------------------------------------------------- |
| 172 | io/fs.t 26 8 30.77% 2-5, 7-9, 11 |
| 173 | io/pipe.t 12 2 16.67% 11-12 |
| 174 | lib/posix.t 18 1 5.56% 12 |
| 175 | op/die_exit.t 16 16 100.00% 1-16 |
| 176 | op/exec.t 8 2 25.00% 5-6 |
| 177 | op/stat.t 58 2 3.45% 3, 35 |
| 178 | Failed 6/183 test scripts, 96.72% okay. 31/5899 subtests failed, 99.47% okay. |
| 179 | |
| 180 | ------------------------------------------------------------------------ |
| 181 | |
| 182 | Getting Started with Perl/iX |
| 183 | |
| 184 | Create your Perl script files with "#!/PERL/PUB/perl" (or an equivalent |
| 185 | symbolic link) as the first line. Use the chmod command to make sure that |
| 186 | your script has execute permission. Run your script! |
| 187 | |
| 188 | If you want to use Perl to write web server CGI scripts, obtain and install |
| 189 | CGI.pm. Build CGI.pm and all other add-on modules below /PERL/PUB/src/. |
| 190 | |
| 191 | Be sure to take a look at the CPAN module list. A wide variety of free Perl |
| 192 | software is available. |
| 193 | |
| 194 | ------------------------------------------------------------------------ |
| 195 | |
| 196 | MPE/iX Implementation Considerations |
| 197 | |
| 198 | There some minor functionality issues to be aware of when comparing Perl |
| 199 | for Unix (Perl/UX) to Perl/iX: |
| 200 | |
| 201 | * MPE gcc/ld doesn't properly support linking NMPRG executables against |
| 202 | NMXL dynamic libraries, so you must manually run mpeix/relink after |
| 203 | each re-build of Perl. |
| 204 | * Perl/iX File::Copy will use MPE's /bin/cp command to copy files by |
| 205 | name in order to preserve file attributes like file code. |
| 206 | * MPE (and thus Perl/iX) lacks support for setgrent(), endgrent(), |
| 207 | setpwent(), endpwent(). |
| 208 | * MPE (and thus Perl/iX) lacks support for hard links. |
| 209 | * MPE requires GETPRIVMODE() in order to bind() to ports less than |
| 210 | 1024. Perl/iX will call GETPRIVMODE() automatically on your behalf if |
| 211 | you attempt to bind() to these low-numbered ports. Note that the |
| 212 | Perl/iX executable and the PERL account do not normally have CAP=PM, |
| 213 | so if you will be bind()-ing to these privileged ports, you will |
| 214 | manually need to add PM capability as appropriate. |
| 215 | * MPE requires that you bind() to an IP address of zero. Perl/iX |
| 216 | automatically replaces the IP address that you pass to bind() with a |
| 217 | zero. |
| 218 | * If you use Perl/iX fcntl() against a socket it will fail, because MPE |
| 219 | requires that you use sfcntl() instead. Perl/iX does not presently |
| 220 | support sfcntl(). |
| 221 | * MPE requires GETPRIVMODE() in order to setuid(). There are too many |
| 222 | calls to setuid() within Perl/iX, so I have not attempted an automatic |
| 223 | GETPRIVMODE() solution similar to bind(). |
| 224 | |
| 225 | ------------------------------------------------------------------------ |
| 226 | |
| 227 | Known Bugs Under Investigation |
| 228 | |
| 229 | * None |
| 230 | |
| 231 | ------------------------------------------------------------------------ |
| 232 | |
| 233 | To-Do List |
| 234 | |
| 235 | * Make setuid()/setgid() support work. |
| 236 | * Make sure that fcntl() against a socket descriptor is redirected to |
| 237 | sfcntl(). |
| 238 | * Add support for Berkeley DB once I've finished porting Berkeley DB. |
| 239 | * Write an MPE XS extension library containing miscellaneous important |
| 240 | MPE functions like GETPRIVMODE(), GETUSERMODE(), and sfcntl(). |
| 241 | |
| 242 | ------------------------------------------------------------------------ |
| 243 | |
| 244 | Change History |
| 245 | |
| 246 | * October 16, 1997 |
| 247 | o Added Demos section to the Perl/iX home page so you can see some |
| 248 | sample Perl applications running on my 3000. |
| 249 | * October 3, 1997 |
| 250 | o Added System Requirements section to the Perl/iX home page just |
| 251 | so the prerequisites stand out more. Various other home page |
| 252 | tweaks. |
| 253 | * October 2, 1997 |
| 254 | o Initial public release. |
| 255 | * September 1997 |
| 256 | o Porting begins. |
| 257 | |
| 258 | ------------------------------------------------------------------------ |
| 259 | |
| 260 | Mark Bixby, markb@cccd.edu |