perlmint.pod
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· POD 代码 · 共 230 行
POD
230 行
If you read this file _as_is_, just ignore the funny characters you see.It is written in the POD format (see pod/perlpod.pod) which is speciallydesigned to be readable as is.=head1 NAMEREADME.mint - Perl version 5 on Atari MiNT=head1 DESCRIPTIONThere is a binary version of perl available from the FreeMiNT projecthttp://freemint.de/ You may wish to use this instead of trying tocompile yourself.B<The following advice is from perl 5.004_02 and is probably ratherout of date.>If you want to build perl yourself on MiNT (or maybe on an Atari withoutMiNT) you may want to accept some advice from somebody who already did it...There was a perl port for Atari ST done by ++jrb bammi@cadence.com.This port tried very hard to build on non-MiNT-systems. For thesake of efficiency I've left this way. Yet, I haven't removed bammi'spatches but left them intact. Unfortunately some of the files thatbammi contributed to the perl distribution seem to have vanished?So, how can you distinguish my patches from bammi's patches? All ofbammi's stuff is embedded in "#ifdef atarist" preprocessor macros.My MiNT port uses "#ifdef __MINT__" instead (and unconditionallyundefines "atarist". If you want to continue on bammi's port, all you have to do is to swap the "-D" and "-U" switches for "__MINT__" and "atarist" in the variable ccflags.However, I think that my version will still run on non-MiNT-systemsprovided that the user has a Eunuchs-like environment (i.e. thestandard envariables like $PATH, $HOME, ... are set, there is aPOSIX compliant shell in /bin/sh, and...)=head1 Known problems with Perl on MiNTThe problems you may encounter when building perl on your machineare most probably due to deficiencies in MiNT resp. the Atariplatform in general.First of all, if you have less than 8 MB of RAM you shouldn'teven try to build Perl yourself. Better grab a binary pre-compiledversion somewhere. Even if you have more memory you should takesome care. Try to run in a fresh environment (without memoryfragmented too much) with as few daemons, accessories, xcontrolmodules etc. as possible. If you run some AES you should consider to start a console based environment instead.A problem has been reported with sed. Sed is used to createsome configuration files based on the answers you have givento the Configure script. Unfortunately the Perl Configure scriptshows sed on MiNT its limits. I have sed 2.05 with a stacksizeof 64k and I have encountered no problems. If sed crashesduring your configuration process you should first try toaugment sed's stacksize: fixstk 64k /usr/bin/sed(or similar). If it still doesn't help you may have a lookwhich other versions of sed are installed on your system.If you have a KGMD 1.0 installation you will find threein /usr/bin. Have a look there.Perl has some "mammut" C files. If gcc reports "internalcompiler error: program cc1 got fatal signal 10" this is verylikely due to a stack overflow in program cc1. Find cc1 and fix its stack. I have made good experiences with fixstk 2 cc1This doesn't establish a stack of 2 Bytes only as you mightthink. It really reserves one half of the available memoryfor cc1's stack. A setting of 1 would reserve the entirememory for cc1, 3 would reserve three fourths. You will haveto find out the value that suits to your system yourself.To find out the location of the program "cc1" simply type`gcc --print-prog-name cc1' at your shell prompt.Now run make (maybe "make -k"). If you get a fatal signal 10 increase cc1's stacksize, if you run out of memory you should either decrease the stacksize or follow some more hints:Perl's building process is very handy on machines with a lotof virtual memory but may result in a disaster if you are shortof memory. If gcc fails to compile many source files you shouldreduce the optimization. Grep for "optimize" in the fileconfig.sh and change the flags.If only several huge files cause problems (actually it is not amatter of the file size resp. the amount of code but depends onthe size of the individual functions) it is useful to bypassthe make program and compile these files directly from thecommand line. For example if you got something like thefollowing from make: CCCMD = gcc -DPERL_CORE .... ... ...: virtual memory exhaustedyou should hack into the shell: gcc -DPERL_CORE ... toke.cPlease note that you have to add the name of the source file(here toke.c) at the end.If none of this helps, you're helpless. Wait for a binaryrelease. If you have succeeded you may encounter another problemat the linking process. If gcc complains that it can't findsome libraries within the perl distribution you probably havean old linker. If it complains for example about "file notfound for xxx.olb" you should cd into the directory inquestion and ln -s libxxx.a xxx.olbThis will fix the problem.This version (5.00402) of perl has passed most of the tests on my system: Failed Test Status Wstat Total Fail Failed List of failed ------------------------------------------------------------------------------ io/pipe.t 10 2 20.00% 7, 9 io/tell.t 13 1 7.69% 12 lib/complex.t 762 13 1.71% 84-85, 248-251, 257, 272-273, 371, 380, 419-420 lib/io_pipe.t 10 1 10.00% 9 lib/io_tell.t 13 1 7.69% 12 op/magic.t 30 2 6.67% 29-30 Failed 6/152 test scripts, 96.05% okay. 20/4359 subtests failed, 99.54% okay.Pipes always cause problems with MiNT, it's actually a surprise thatmost of the tests did work. I've got no idea why the "tell" test failed,this shouldn't mean too big a problem however.Most of the failures of lib/complex seem to be harmless, actually errorsfar right to the decimal point... Two failures seem to be serious:The sign of the results is reversed. I would say that this is dueto minor bugs in the portable math lib that I compiled perl with.I haven't bothered very much to find the reason for the failureswith op/magic.t and op/stat.t. Maybe you'll find it out.##########################################################################Another possible problem may arise from the implementation of the "pwd" command. It happened to add a carriage return and newline to its output no matter what the setting of $UNIXMODE is. This is quite annoying since manylibrary modules for perl take the output of pwd, chop off thetrailing newline character and then expect to see a valid path inthat. But the carriage return (last but second character!) isn'tchopped off. You can either try to patch all library modules (atthe price of performance for the extra transformation) or you canuse my version of pwd that doesn't suffer from this deficiency.The fixed implementation is in the mint subdirectory. Running"Configure" will attempt to build and install it if necessary(hints/mint.sh will do this work) but you can build and install itexplicitly by: cd mint make installThis is the fastest solution.Just in case you want to go the hard way: perl won't even build with abroken pwd! You will have to fix the library modules(ext/POSIX/POSIX.pm, lib/Cwd.pm, lib/pwd.pl) at last after buildingminiperl.A major nuisance of current MiNTLib versions is the implementationof system() which is far from being POSIX compliant. A real system()should fork and then exec /bin/sh with its argument as a commandline to the shell. The MiNTLib system() however doesn't expectthat every user has a POSIX shell in /bin/sh. It tries to workaround the problem by forking and exec'ing the first token in its argumentstring. To get a little bit of compliance to POSIX system() ittries to handle at least redirection ("<" or ">") on its own behalf. This isn't a good idea since many programs expect that they canpass a command line to system() that exploits all features of aPOSIX shell. If you use the MiNTLib version of system() withperl the Perl function system() will suffer from the same deficiencies.You will find a fixed version of system() in the mint subdirectory.You can easily insert this version into your system libc: cd mint make system.o ar r /usr/lib/libc.a ranlib /usr/lib/libc.aIf you are suspicious you should either back up your libc beforeor extract the original system.o from your libc with "ar x /usr/lib/libc.a system.o". You can then backup the system.omodule somewhere before you succeed.Anything missing? Yep, I've almost forgotten... No file in this distribution without a fine saying. Take this one: "From a thief you should learn: (1) to work at night; (2) if one cannot gain what one wants in one night to try again the next night; (3) to love one's coworkers just as thieves love each other; (4) to be willing to risk one's life even for a little thing; (5) not to attach too much value to things even though one has risked one's life for them - just as a thief will resell a stolen article for a fraction of its real value; (6) to withstand all kinds of beatings and tortures but to remain what you are; and (7) to believe your work is worthwhile and not be willing to change it." -- Rabbi Dov Baer, Maggid of MezeritchOK, this was my motto while working on Perl for MiNT, especially rule (1)...Have fun with Perl!=head1 AUTHORGuido Flohr mailto:guido@FreeMiNT.de
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?