Dit is de opdracht-perlport die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
perlport - Draagbare Perl schrijven
PRODUCTBESCHRIJVING
Perl draait op talloze besturingssystemen. Hoewel de meesten van hen veel gemeen hebben, zijn ze dat wel
hebben ook hun eigen unieke kenmerken.
Dit document is bedoeld om u te helpen ontdekken wat draagbare Perl-code inhoudt. Dat
Als u eenmaal de beslissing heeft genomen om draagbaar te schrijven, weet u waar de lijnen worden getrokken, en
je kunt erin blijven.
Er is een afweging tussen optimaal profiteren van een bepaald type computer en
profiteren van een volledig assortiment ervan. Natuurlijk, naarmate u uw bereik vergroot en wordt
Naarmate de diversiteit groter wordt, vallen de gemeenschappelijke factoren weg en blijft er een steeds kleiner gebied over
van een gemeenschappelijke basis waarin u kunt opereren om een bepaalde taak te volbrengen. Dus wanneer je
beginnen een probleem aan te pakken, is het belangrijk om te overwegen onder welk deel van de afweging
curve die u wilt bedienen. Concreet moet u beslissen of het belangrijk is dat de
De taak die u codeert, heeft de volledige algemeenheid dat deze draagbaar is, of dat u deze gewoon kunt krijgen
de klus is nu geklaard. Dit is de moeilijkste keuze die gemaakt kan worden. De rest is eenvoudig, omdat
Perl biedt veel keuzes, op welke manier u uw probleem ook wilt benaderen.
Als je het op een andere manier bekijkt, gaat het schrijven van draagbare code meestal over het opzettelijk beperken van je mogelijkheden
beschikbare keuzes. Natuurlijk vergt het discipline en opoffering om dat te doen. Het product
van draagbaarheid en gemak kan een constante zijn. Je bent gewaarschuwd.
Houd rekening met twee belangrijke punten:
Niet alle Perl-programma's hoeven draagbaar te zijn
Er is geen reden waarom je Perl niet als taal zou moeten gebruiken om Unix-tools aan elkaar te lijmen.
of om een prototype van een Macintosh-applicatie te maken, of om het Windows-register te beheren. Als het
het heeft geen zin om in een bepaald programma om de een of andere reden naar portabiliteit te streven,
doe dan geen moeite.
Bijna heel Perl al is draagbare
Laat u niet misleiden door te denken dat het moeilijk is om draagbare Perl-code te maken. Dat is het niet.
Perl doet zijn uiterste best om de kloof te overbruggen tussen wat er op verschillende manieren beschikbaar is
platforms en alle beschikbare middelen om deze functies te gebruiken. Dus bijna alle Perl
code draait op elke machine zonder aanpassingen. Maar er zijn enkele belangrijke problemen
bij het schrijven van draagbare code, en dit document gaat volledig over deze kwesties.
Hier is de algemene regel: wanneer u een taak benadert die gewoonlijk wordt uitgevoerd met behulp van een hele reeks
platforms, denk na over het schrijven van draagbare code. Op die manier offer je niet veel op
van de uitvoeringskeuzes waar u zelf gebruik van kunt maken en die u tegelijkertijd kunt geven
uw gebruikers veel platformkeuzes. Aan de andere kant, wanneer je moet profiteren
van een uniek kenmerk van een bepaald platform, zoals vaak het geval is bij systemen
programmeren (of het nu voor Unix, Windows, VMS, enz. is), overweeg dan om platformspecifiek te schrijven
code.
Als de code op slechts twee of drie besturingssystemen kan worden uitgevoerd, moet u wellicht overwegen
alleen de verschillen tussen die specifieke systemen. Het belangrijkste is om te beslissen waar
de code zal worden uitgevoerd en wees weloverwogen in uw beslissing.
Het onderstaande materiaal is onderverdeeld in drie hoofdsecties: de belangrijkste kwesties van draagbaarheid
("ISSUES"), platformspecifieke problemen ("PLATFORMS") en ingebouwde Perl-functies die
gedragen zich anders op verschillende poorten ("FUNCTION IMPLEMENTATIONS").
Deze informatie mag niet als volledig worden beschouwd; het omvat mogelijk van voorbijgaande aard
informatie over eigenaardigheden van enkele havens, die bijna allemaal in staat zijn
van constante evolutie. Dit materiaal moet dus worden beschouwd als een eeuwigdurend werk
voortgang (" ").
KWESTIES
nieuwe regels
In de meeste besturingssystemen worden regels in bestanden beëindigd door nieuwe regels. Net wat er gebruikt wordt
aangezien een nieuwe regel kan variëren van besturingssysteem tot besturingssysteem. Unix gebruikt traditioneel "\012", één type DOSish
I/O gebruikt "\015\012", Mac OS gebruikt "\015" en z/OS gebruikt "\025".
Perl gebruikt "\n" om de "logische" nieuwe regel weer te geven, waarbij wat logisch is afhankelijk kan zijn van de
platform in gebruik. In MacPerl betekent "\n" altijd "\015". Op EBCDIC-platforms kan "\n" dat wel zijn
wees "\025" of "\045". In DOSish perls betekent "\n" meestal "\012", maar bij het benaderen van a
bestand in "tekst"-modus, gebruikt perl de ":crlf"-laag die het vertaalt naar (of van)
"\015\012", afhankelijk van of u leest of schrijft. Unix doet hetzelfde op
ttys in canonieke modus. "\015\012" wordt gewoonlijk CRLF genoemd.
Om achterliggende nieuwe regels uit tekstregels te verwijderen, gebruikt u "chomp()". Met standaardinstellingen die
De functie zoekt naar een volgteken "\n" en trimt zo op een draagbare manier.
Als u met binaire bestanden (of tekstbestanden in binaire modus) werkt, zorg er dan voor dat u expliciet $/ instelt
naar de juiste waarde voor uw bestandsformaat voordat u "chomp()" gebruikt.
Vanwege de vertaling in de "tekst"-modus hebben DOSish-perls beperkingen bij het gebruik van "seek" en
"tell" op een bestand dat toegankelijk is in de "text"-modus. Blijf bij het "zoeken" naar locaties waar u vandaan komt
"vertellen" (en geen andere), en u bent meestal vrij om "zoeken" en "vertellen" te gebruiken, zelfs in "tekst"
modus. Het gebruik van "seek" of "tell" of andere bestandsbewerkingen is mogelijk niet overdraagbaar. Als je gebruikt
"binmode" in een bestand kunt u echter meestal "zoeken" en "vertellen" met willekeurige waarden
veilig.
Een veel voorkomende misvatting bij het programmeren van sockets is dat er overal "\n eq \012" is. Tijdens gebruik
Er zijn protocollen nodig zoals de gebruikelijke internetprotocollen "\012" en "\015".
specifiek, en de waarden van de logische "\n" en "\r" (carriage return) zijn dat niet
betrouwbaar.
print SOCKET "Hallo, klant!\r\n"; # FOUT
print SOCKET "Hallo, klant!\015\012"; # RECHTS
Het gebruik van "\015\012" (of "\cM\cJ", of "\x0D\x0A") kan echter vervelend en lelijk zijn, omdat
maar ook verwarrend voor degenen die de code onderhouden. Als zodanig levert de module "Socket".
het juiste voor degenen die het willen.
gebruik Socket qw(:DEFAULT:crlf);
print SOCKET "Hallo, klant!$CRLF" # RECHTS
Houd er bij het lezen vanuit een socket rekening mee dat het standaard invoerrecordscheidingsteken $/ "\n" is.
maar robuuste socketcode herkent als "\012" of "\015\012" als einde van de regel:
terwijl ( ) { # NIET ADVISEERBAAR!
#...
}
Omdat zowel CRLF als LF eindigen op LF, kan het invoerrecordscheidingsteken worden ingesteld op LF en een willekeurige CR
later gestript. Beter om te schrijven:
gebruik Socket qw(:DEFAULT:crlf);
lokaal($/) = LF; # niet nodig als $/ al \012 is
terwijl ( ) {
s/$CR?$LF/\n/; # Ik weet niet zeker of socket LF of CRLF gebruikt, OK
# s/\015?\012/\n/; # hetzelfde
}
Dit voorbeeld heeft de voorkeur boven het vorige, zelfs voor Unix-platforms, omdat het nu allemaal beschikbaar is
"\015"'s ("\cM"'s) zijn verwijderd (en er was veel vreugde).
Op dezelfde manier zijn er functies die tekstgegevens retourneren, zoals een functie die een web ophaalt
pagina - moet soms nieuwe regels vertalen voordat de gegevens worden geretourneerd, als dat nog niet het geval is
vertaald naar de lokale newline-weergave. Vaak zal een enkele regel code dat wel doen
voldoen:
$data =~ s/\015?\012/\n/g;
$ data teruggeven;
Een deel hiervan kan verwarrend zijn. Hier is een handige verwijzing naar de ASCII CR en LF
karakters. Je kunt het uitprinten en in je portemonnee plakken.
LF eq \012 eq \x0A eq \cJ eq chr(10) vgl. ASCII 10
CR eq \015 eq \x0D eq \cM eq chr(13) vgl. ASCII 13
| Unix | DOS | Mac|
---------------------------
\n | LF | LF | CR |
\r | CR | CR | LF |
\n* | LF | CRLF | CR |
\r* | CR | CR | LF |
---------------------------
* tekstmodus STDIO
De Unix-kolom gaat ervan uit dat je in canonical geen seriële lijn (zoals een tty) gebruikt
modus. Als dat zo is, wordt CR bij invoer "\n" en wordt "\n" bij uitvoer CRLF.
Dit zijn slechts de meest voorkomende definities van "\n" en "\r" in Perl. Dat kan best zo zijn
anderen. Bijvoorbeeld op een EBCDIC-implementatie zoals z/OS (OS/390) of OS/400 (met
de ILE, de PASE is ASCII-gebaseerd) het bovenstaande materiaal is vergelijkbaar met "Unix", maar de code
cijfers veranderen:
LF eq \025 eq \x15 eq \cU eq chr(21) vergelijking CP-1047 21
LF eq \045 eq \x25 eq chr(37) vergelijking CP-0037 37
CR eq \015 eq \x0D eq \cM eq chr(13) vergelijking CP-1047 13
CR eq \015 eq \x0D eq \cM eq chr(13) vergelijking CP-0037 13
| z/OS | OS/400 |
----------------------
\n | LF | LF |
\r | CR | CR |
\n* | LF | LF |
\r* | CR | CR |
----------------------
* tekstmodus STDIO
Aantallen eindeloosheid en Breedte
Verschillende CPU's slaan gehele getallen en drijvende-kommagetallen in verschillende volgordes op (zogenaamde
eindeloosheid) en breedtes (32-bit en 64-bit zijn tegenwoordig de meest voorkomende). Dit heeft gevolgen voor uw
programma's wanneer ze proberen getallen in binair formaat over te dragen vanuit één CPU-architectuur
naar een andere, meestal 'live' via een netwerkverbinding, of door de nummers op te slaan
secundaire opslag zoals een schijfbestand of tape.
Conflicterende opslagorders maken de cijfers tot een grote puinhoop. Als een kleine endian-host
(Intel, VAX) slaat 0x12345678 (305419896 in decimaal) op, een big-endian-host (Motorola, Sparc,
PA) leest het als 0x78563412 (2018915346 in decimalen). Alfa en MIPS kunnen een van de volgende zijn:
Digital/Compaq gebruikte/gebruikt ze in Little-Endian-modus; SGI/Cray gebruikt ze in big-endian
modus. Om dit probleem bij netwerkverbindingen (socket) te voorkomen, gebruikt u de "pack" en "unpack"
formaten "n" en "N", de "netwerk" -orders. Deze zijn gegarandeerd draagbaar.
Vanaf Perl 5.10.0 kunt u ook de modifiers ">" en "<" gebruiken om grote of kleine
endian byte-volgorde. Dit is handig als u gehele getallen met teken of 64-bits wilt opslaan
gehele getallen bijvoorbeeld.
U kunt de endianness van uw platform verkennen door een ingepakte datastructuur uit te pakken
native formaat zoals:
print uitpakken("h*", pack("s2", 1, 2)), "\n";
# '10002000' op bijvoorbeeld Intel x86 of Alpha 21064 in Little-Endian-modus
# '00100020' op bijvoorbeeld Motorola 68040
Als u onderscheid wilt maken tussen endian-architecturen, kunt u een van de volgende gebruiken
variabelen zijn als volgt ingesteld:
$is_big_endian = uitpakken("h*", pack("s", 1)) =~ /01/;
$is_little_endian = uitpakken("h*", pack("s", 1)) =~ /^1/;
Verschillende breedtes kunnen afknotting veroorzaken, zelfs tussen platforms met een gelijke lengte. De
platform met een kortere breedte verliest de bovenste delen van het nummer. Er is geen goede oplossing
voor dit probleem, behalve om het overbrengen of opslaan van onbewerkte binaire getallen te voorkomen.
Je kunt beide problemen op twee manieren omzeilen. Ofwel overdracht- en winkelnummers
altijd in tekstformaat, in plaats van onbewerkt binair, of overweeg anders modules zoals
"Data::Dumper" en "Storable" (inbegrepen vanaf Perl 5.8). Alle gegevens als tekst bewaren
vereenvoudigt de zaken aanzienlijk.
De v-strings zijn alleen draagbaar tot v2147483647 (0x7FFF_FFFF), zo ver EBCDIC, of
meer precies UTF-EBCDIC zal verdwijnen.
Bestanden en Bestandssystemen
De meeste platforms structureren bestanden tegenwoordig op een hiërarchische manier. Het is dus redelijk
Het is veilig om aan te nemen dat alle platforms het idee ondersteunen van een ‘pad’ om een unieke identiteit te identificeren
bestand op het systeem. Hoe dat pad werkelijk wordt geschreven, verschilt echter aanzienlijk.
Hoewel vergelijkbaar, verschillen de bestandspadspecificaties tussen Unix, Windows, Mac OS, OS/2,
VMS, VOS, RISC OS en waarschijnlijk nog andere. Unix is bijvoorbeeld een van de weinige besturingssystemen die dat wel doen
heeft het elegante idee van een enkele hoofdmap.
DOS, OS/2, VMS, VOS en Windows kunnen op dezelfde manier werken als Unix met "/" als padscheidingsteken, of
op hun eigen idiosyncratische manieren (zoals het hebben van verschillende hoofdmappen en verschillende
"niet-geroote" apparaatbestanden zoals NIL: en LPT:).
Mac OS 9 en eerder gebruikten phor als padscheidingsteken in plaats van "/".
Het bestandssysteem ondersteunt mogelijk geen harde links ("link"), noch symbolische links ("symlink",
"leeslink", "lstat").
Het bestandssysteem ondersteunt mogelijk geen toegangstijdstempel of wijzigingstijdstempel (wat betekent dat
ongeveer de enige draagbare tijdstempel is de wijzigingstijdstempel), of één seconde
granulariteit van alle tijdstempels (het FAT-bestandssysteem beperkt bijvoorbeeld de tijdgranulariteit tot twee
seconden).
De "inode change timestamp" (de "-C" filetest) kan in werkelijkheid de "aanmaaktijdstempel" zijn
(wat niet het geval is in Unix).
VOS perl kan Unix-bestandsnamen emuleren met "/" als padscheidingsteken. De oorspronkelijke padnaam
tekens groter dan, kleiner dan, hekje en procentteken worden altijd geaccepteerd.
RISC OS perl kan Unix-bestandsnamen emuleren met "/" als padscheidingsteken, of native gaan en gebruiken
"." voor padscheidingsteken en : om bestandssystemen en schijfnamen aan te geven.
Ga niet uit van de semantiek van de toegang tot het Unix-bestandssysteem: lezen, schrijven en uitvoeren zijn allemaal
machtigingen er zijn, en zelfs als ze bestaan, dat hun semantiek (bijvoorbeeld wat do
"r", "w" en "x" betekenen in een directory) zijn Unix-versies. De verschillende Unix/POSIX
compatibiliteitslagen proberen meestal om interfaces zoals "chmod()" te laten werken, maar soms
er is simpelweg geen goede mapping.
Als dit allemaal intimiderend is, wees dan niet (nou ja, misschien maar een beetje) bang. Er zijn modules
dat kan helpen. De "File::Spec"-modules bieden methoden om op wat dan ook het juiste te doen
platform draait toevallig het programma.
gebruik Bestand::Spec::Functies;
chdir(updir()); # één directory omhoog gaan
mijn $file = catfile(curdir(), 'temp', 'file.txt');
# op Unix en Win32, './temp/file.txt'
# op Mac OS Classic, ':temp:file.txt'
# op VMS, '[.temp]file.txt'
"File::Spec" is beschikbaar in de standaarddistributie vanaf versie 5.004_05.
"File::Spec::Functions" komt alleen voor in "File::Spec" 0.7 en hoger, en in sommige versies van Perl
kom met versie 0.6. Als "File::Spec" niet is bijgewerkt naar 0.7 of hoger, moet u de
objectgeoriënteerde interface van "File::Spec" (of upgrade "File::Spec").
Over het algemeen mogen de bestandspaden van productiecode niet hardgecodeerd zijn. Ze gebruiksvriendelijk maken
geleverd of gelezen vanuit een configuratiebestand is beter, rekening houdend met dat bestandspad
syntaxis varieert op verschillende machines.
Dit is vooral merkbaar in scripts als Makefiles en testsuites, die vaak voorkomen
neem "/" aan als padscheidingsteken voor submappen.
Ook handig is "File::Basename" uit de standaarddistributie, die een padnaam splitst
in stukken (basisbestandsnaam, volledig pad naar map en bestandsachtervoegsel).
Zelfs als je op een enkel platform zit (als je Unix een enkel platform kunt noemen), onthoud dat dan niet
rekenen op het bestaan of de inhoud van bepaalde systeemspecifieke bestanden of mappen,
als / Etc / passwd, /etc/sendmail.conf, / Etc / resolv.conf, of zelfs / Tmp /. Bijvoorbeeld,
/ Etc / passwd kan bestaan, maar bevat niet de gecodeerde wachtwoorden, omdat het systeem er gebruik van maakt
een vorm van verhoogde veiligheid. Of het bevat mogelijk niet alle rekeningen, omdat de
systeem maakt gebruik van NIS. Als de code afhankelijk is van een dergelijk bestand, voeg dan een beschrijving toe van
het bestand en het formaat ervan in de documentatie van de code, en maak het de gebruiker vervolgens gemakkelijk
overschrijf de standaardlocatie van het bestand.
Ga er niet vanuit dat een tekstbestand eindigt met een nieuwe regel. Dat zou wel moeten, maar mensen vergeten het.
Zorg ervoor dat u geen twee bestanden of mappen met dezelfde naam hebt met verschillende hoofdletters, zoals test.mv
en Testpl, aangezien veel platforms hoofdletterongevoelig zijn (of op zijn minst hoofdlettervergevingsgezind)
bestandsnamen. Probeer ook geen niet-woordtekens (behalve ".") in de namen te gebruiken, en
houd ze aan de 8.3-conventie, voor maximale draagbaarheid, hoe zwaar dit ook kan zijn
verschijnen.
Op dezelfde manier, wanneer u de "AutoSplit"-module gebruikt, probeer dan uw functies te houden aan 8.3-naamgeving en
hoofdletterongevoelige conventies; of zorg er op zijn minst voor dat de resulterende bestanden een
uniek (niet hoofdlettergevoelig) eerste 8 tekens.
Witruimte in bestandsnamen wordt op de meeste systemen getolereerd, maar niet op alle, en zelfs op systemen
waar het zou kunnen worden getolereerd, zouden sommige hulpprogramma's door dergelijke witruimte in de war kunnen raken.
Veel systemen (DOS, VMS ODS-2) kunnen niet meer dan één "." in hun bestandsnamen.
Ga er niet van uit dat ">" niet het eerste teken van een bestandsnaam zal zijn. Gebruik altijd '<' expliciet
open een bestand om te lezen, of nog beter, gebruik de drie-arg-versie van "open", tenzij u
wil dat de gebruiker een geopende leiding kan specificeren.
open mijn $fh, '<', $existing_file) of sterf $!;
Als bestandsnamen vreemde tekens gebruiken, is het het veiligst om deze te openen met "sysopen".
van "open". "open" is magisch en kan tekens als ">", "<" en "|" vertalen, wat mogelijk is
het verkeerde zijn om te doen. (Soms is het echter juist.) Open blik met drie arg's
helpen ook beschermen tegen deze vertaling in gevallen waarin dit ongewenst is.
Gebruik ´ niet als onderdeel van een bestandsnaam, aangezien veel systemen dat gebruiken voor hun eigen semantiek
(Mac OS Classic voor het scheiden van padnaamcomponenten, veel netwerkschema's en hulpprogramma's
voor het scheiden van de knooppuntnaam en de padnaam, enzovoort). Vermijd om dezelfde redenen
"@", ";" en "|".
Ga er niet van uit dat je in padnamen twee schuine strepen "//" kunt samenvouwen tot één: sommige
Netwerk- en clusterbestandssystemen hebben daarvoor een speciale semantiek. Laat het opereren
systeem regelt het.
De draagbare bestandsnaam tekens zoals gedefinieerd door ANSI C zijn
abcdefghijklmnopqrtuv wxyz
ABCDEFGHIJKLMNOPQRTUV WXYZ
0 1 2 3 4 5 6 7 8 9
. _ -
en de "-" mag niet het eerste teken zijn. Als je hypercorrect wilt zijn, blijf dan case-
ongevoelig en binnen de naamgevingsconventie van 8.3 (alle bestanden en mappen moeten
uniek binnen één map als hun namen in kleine letters worden weergegeven en worden afgekapt tot acht
tekens vóór de ".", indien aanwezig, en tot drie tekens na de ".", indien aanwezig). (En
gebruik geen "."s in mapnamen.)
Systeem deelname
Niet alle platforms bieden een opdrachtregel. Dit zijn meestal platforms die primair afhankelijk zijn
op een grafische gebruikersinterface (GUI) voor gebruikersinteractie. Een programma dat een commando vereist
lijninterface werkt mogelijk niet overal. Dit is waarschijnlijk voor de gebruiker van het programma
ermee om moet gaan, dus blijf niet te laat op als u zich er zorgen over maakt.
Sommige platforms kunnen bestanden die door het systeem openstaan, niet verwijderen of hernoemen, deze beperking kan dat wel zijn
is ook van toepassing op het wijzigen van meta-informatie over het bestandssysteem, zoals bestandsrechten of eigenaren.
Vergeet niet om bestanden te "sluiten" als u er klaar mee bent. Een geopend bestand niet "ontkoppelen" of hernoemen
bestand. Een bestand dat al is gekoppeld of geopend, mag u niet 'koppelen' of 'openen'; eerst losmaken of sluiten.
Open hetzelfde bestand niet vaker dan één keer om te schrijven, zoals bij sommige besturingssystemen het geval is
plaats verplichte vergrendelingen op dergelijke bestanden.
Ga er niet van uit dat schrijf-/wijzigrechten voor een map het recht geven om iets toe te voegen of te verwijderen
bestanden/mappen in die map. Dat is bestandssysteemspecifiek: in sommige bestandssystemen kun je
heeft ook schrijf-/wijzigrechten nodig (of zelfs alleen) in het bestand/de map zelf. In bepaalde
bestandssystemen (AFS, DFS) is de toestemming om directory-items toe te voegen/verwijderen volledig
aparte toestemming.
Ga er niet van uit dat een enkele "ontkoppeling" het bestand volledig verwijdert: sommige bestandssystemen
(met name die in VMS) hebben bestandssystemen met versiebeheer, en "unlink()" verwijdert alleen de
meest recente (het verwijdert niet alle versies omdat standaard de native tools aan staan
deze platforms verwijderen ook alleen de meest recente versie). Het draagbare idioom om te verwijderen
alle versies van een bestand zijn
1 terwijl u "bestand" ontkoppelt;
Dit wordt beëindigd als het bestand om de een of andere reden niet meer kan worden verwijderd (beveiligd, niet aanwezig, en
spoedig).
Reken niet op een specifieke omgevingsvariabele die bestaat in %ENV. Reken niet op %ENV
vermeldingen zijn hoofdlettergevoelig of zelfs hoofdletterbehoudend. Probeer %ENV niet te wissen door te zeggen
"%ENV = ();", of, als het echt nodig is, maak het afhankelijk van "$^O ne 'VMS'" aangezien in
VMS De %ENV-tabel is veel meer dan een sleutel-waardereekstabel per proces.
Op VMS worden sommige vermeldingen in de %ENV-hash dynamisch aangemaakt wanneer hun sleutel wordt gebruikt op een
lezen als ze nog niet eerder bestonden. De waarden voor $ENV{HOME}, $ENV{TERM}, $ENV{PATH},
en $ENV{USER}, staan erom bekend dat ze dynamisch worden gegenereerd. De specifieke namen die dat zijn
dynamisch gegenereerd kan variëren afhankelijk van de versie van de C-bibliotheek op VMS, en er kunnen er nog meer zijn
bestaan dan zijn gedocumenteerd.
Op VMS blijven wijzigingen in de %ENV-hash standaard bestaan nadat perl is afgesloten. Volgend
aanroepen van perl in hetzelfde proces kunnen onbedoeld omgevingsinstellingen overnemen
die bedoeld waren als tijdelijk.
Reken nergens op signalen of %SIG.
Reken niet op 'globbing' van bestandsnamen. Gebruik in plaats daarvan "opendir", "readdir" en "closedir".
Reken niet op omgevingsvariabelen per programma, of op huidige mappen per programma.
Reken niet op specifieke waarden van $!, noch numeriek, noch vooral de tekenreekswaarden.
Gebruikers kunnen hun landinstellingen wijzigen, waardoor foutmeldingen naar hun eigen taal worden vertaald
talen. Als u een POSIX-achtige omgeving kunt vertrouwen, kunt u de symbolen draagbaar gebruiken
gedefinieerd door de module "Errno", zoals "ENOENT". En vertrouw niet op de waarden van $! helemaal niet
behalve onmiddellijk na een mislukte systeemoproep.
commando namen tegen filet padnamen
Ga er niet van uit dat de naam die wordt gebruikt om een opdracht of programma met "system" of "exec" aan te roepen, dat wel kan
kan ook worden gebruikt om te testen op het bestaan van het bestand dat de uitvoerbare code daarvoor bevat
opdracht of programma. Ten eerste hebben veel systemen "interne" commando's die ingebouwd zijn in het
shell of OS en hoewel deze opdrachten kunnen worden aangeroepen, is er geen bijbehorend bestand.
Ten tweede hebben sommige besturingssystemen (bijvoorbeeld Cygwin, DJGPP, OS/2 en VOS) achtervoegsels vereist
voor uitvoerbare bestanden; deze achtervoegsels zijn over het algemeen toegestaan op de opdrachtnaam, maar dat is het ook
niet verplicht. Dus een commando als "perl" kan voorkomen in een bestand met de naam "perl", "perl.exe",
or "perl.pm", afhankelijk van het besturingssysteem. De variabele "_exe" in de "Config"
module bevat het uitvoerbare achtervoegsel, indien aanwezig. Ten derde stelt de VMS-poort zorgvuldig $^X en
$Config{perlpath} zodat er geen verdere verwerking nodig is. Dit is net zo goed,
omdat de hieronder gebruikte overeenkomende reguliere expressie dan te maken zou krijgen met een mogelijk
volgversienummer in de VMS-bestandsnaam.
Om $^X naar een bestandspadnaam te converteren, rekening houdend met de vereisten van de verschillende
besturingssysteemmogelijkheden, zeg:
gebruik configuratie;
mijn $thisperl = $^X;
if ($^O ne 'VMS')
{$thisperl .= $Config{_exe} tenzij $thisperl =~ m/$Config{_exe}$/i;}
Om $Config{perlpath} naar een bestandspadnaam te converteren, zegt u:
gebruik configuratie;
mijn $thisperl = $Config{perlpath};
if ($^O ne 'VMS')
{$thisperl .= $Config{_exe} tenzij $thisperl =~ m/$Config{_exe}$/i;}
Netwerken
Ga er niet vanuit dat u het openbare internet kunt bereiken.
Ga er niet van uit dat er maar één manier is om door firewalls naar het openbare internet te komen.
Ga er niet vanuit dat je de buitenwereld kunt bereiken via een andere poort dan 80, of via een web
volmacht. ftp wordt door veel firewalls geblokkeerd.
Ga er niet vanuit dat u e-mail kunt verzenden door verbinding te maken met de lokale SMTP-poort.
Ga er niet vanuit dat u uzelf of een knooppunt kunt bereiken met de naam 'localhost'. Hetzelfde
geldt voor '127.0.0.1'. Je zult beide moeten proberen.
Ga er niet van uit dat de host slechts één netwerkkaart heeft, of dat deze niet aan meerdere netwerkkaarten kan binden
virtuele IP-adressen.
Ga niet uit van een bepaalde netwerkapparaatnaam.
Ga er niet van uit dat een bepaalde set "ioctl()" zal werken.
Ga er niet vanuit dat u hosts kunt pingen en antwoorden kunt krijgen.
Ga er niet van uit dat een bepaalde poort (service) zal reageren.
Ga er niet van uit dat "Sys::Hostnaam" (of een andere API of opdracht) een volledig retourneert
gekwalificeerde hostnaam of een niet-gekwalificeerde hostnaam: het hangt allemaal af van hoe het systeem was
geconfigureerd. Bedenk ook dat je voor zaken als DHCP en NAT de hostnaam terugkrijgt
is misschien niet erg nuttig.
Al het bovenstaande lijkt misschien afschrikwekkend, en dat is het ook, maar de sleutel is om te degraderen
op een elegante manier als u de gewenste netwerkdienst niet kunt bereiken. Kwaken of
ophangen ziet er niet erg professioneel uit.
Interproces Communicatie (IPC)
Over het algemeen mag u niet rechtstreeks toegang krijgen tot het systeem in code die draagbaar is. Dat betekent: nee
"system", "exec", "fork", "pipe", "``", "qx//", "open" met een "|", noch een van de andere
dingen die het de moeite waard maken om een Perl-hacker te zijn.
Commando's die externe processen starten, worden over het algemeen op de meeste platforms ondersteund (hoewel
velen van hen ondersteunen geen enkele vorm van forking). Het probleem met het gebruik ervan komt voort uit
waar je ze op aanroept. Externe tools worden vaak anders genoemd op verschillende
platforms, zijn mogelijk niet beschikbaar op dezelfde locatie, accepteren mogelijk andere argumenten,
kunnen zich anders gedragen en hun resultaten vaak op een platformafhankelijke manier presenteren.
U hoeft er dus zelden op te vertrouwen om consistente resultaten te behalen. (Nogmaals, als
jij belt netstat -a, verwacht je waarschijnlijk niet dat het zowel op Unix als op CP/M draait.)
Een bijzonder veel voorkomend stukje Perl-code is het openen van een pipe to Verzend mail:
open(MAIL, '|/usr/lib/sendmail -T')
of sterf "kan sendmail: $ niet splitsen!";
Dit is prima voor systeemprogrammering wanneer bekend is dat sendmail beschikbaar is. Maar het is
niet goed voor veel niet-Unix-systemen, en zelfs voor sommige Unix-systemen die mogelijk geen sendmail hebben
geïnstalleerd. Als er een draagbare oplossing nodig is, bekijk dan de verschillende distributies op CPAN
ermee omgaan. "Mail::Mailer" en "Mail::Send" in de distributie "MailTools" zijn
veelgebruikte, en bieden verschillende mailingmethoden, waaronder "mail", "sendmail", en
directe SMTP (via "Net::SMTP") als er geen mail transfer agent beschikbaar is. "Mail::Verstuur bericht"
is een standalone module die eenvoudige, platformonafhankelijke mailing verzorgt.
De Unix System V IPC ("msg*(), sem*(), shm*()") is niet beschikbaar, zelfs niet op alle Unix
platforms.
Gebruik niet het kale resultaat van "pack("N", 10, 20, 30, 40)" of kale v-strings (zoals
als "v10.20.30.40") om IPv4-adressen weer te geven: beide vormen verpakken gewoon de vier bytes in
netwerk volgorde. Dat dit gelijk zou zijn aan de C-taal "in_addr" -structuur (wat is wat
de socketcode die intern wordt gebruikt) is niet gegarandeerd. Gebruik de routines van om draagbaar te zijn
de "Socket"-extensie, zoals "inet_aton()", "inet_ntoa()" en "sockaddr_in()".
De vuistregel voor draagbare code is: doe het allemaal in draagbare Perl, of gebruik een module (dat
kan het intern implementeren met platformspecifieke code, maar heeft een gemeenschappelijke interface).
Extern subroutines (XS)
XS-code kan doorgaans met elk platform werken, behalve met afhankelijke bibliotheken en headers
bestanden enz. zijn mogelijk niet direct beschikbaar of draagbaar, of de XS-code zelf is dat mogelijk niet
platformspecifiek, net zoals Perl-code dat zou kunnen zijn. Als de bibliotheken en headers draagbaar zijn,
dan is het normaal gesproken redelijk om ervoor te zorgen dat de XS-code ook draagbaar is.
Bij het schrijven van XS-code doet zich een ander soort portabiliteitsprobleem voor: de beschikbaarheid van een C
compiler op het systeem van de eindgebruiker. C brengt zijn eigen portabiliteitsproblemen met zich mee, en
Door XS-code te schrijven, wordt u aan een aantal daarvan blootgesteld. Puur in Perl schrijven is een eenvoudigere manier
draagbaarheid te bereiken.
Standaard Modules
Over het algemeen werken de standaardmodules op verschillende platforms. Opmerkelijke uitzonderingen zijn de "CPAN"
module (die momenteel verbindingen maakt met externe programma's die mogelijk niet beschikbaar zijn),
platformspecifieke modules (zoals "ExtUtils::MM_VMS") en DBM-modules.
Er is niet één DBM-module beschikbaar op alle platforms. "SDBM_File" en de anderen zijn
algemeen beschikbaar op alle Unix- en DOSish-poorten, maar niet in MacPerl, waar alleen
"NDBM_File" en "DB_File" zijn beschikbaar.
Het goede nieuws is dat er op zijn minst een of andere DBM-module beschikbaar zou moeten zijn, en "AnyDBM_File" zal dat ook doen
gebruik welke module het ook kan vinden. Dan moet de code uiteraard behoorlijk streng zijn,
dalend naar de grootste gemene deler (bijvoorbeeld niet meer dan 1K voor elk record), zodat
het werkt met elke DBM-module. Zie AnyDBM_File voor meer details.
Tijd en Datum
De notie van de tijd van de dag en de kalenderdatum van het systeem wordt op zeer verschillende manieren beheerd
manieren. Ga er niet van uit dat de tijdzone is opgeslagen in $ENV{TZ}, en zelfs als dat wel het geval is, ga er dan niet van uit
dat u de tijdzone via die variabele kunt beheren. Ga er niet van uit dat er iets is over de
tijdzoneafkortingen van drie letters (bijvoorbeeld dat MST de Mountain Standard zou zijn).
Tijd, het is bekend dat het staat voor Moskou-standaardtijd). Als u tijdzones moet gebruiken,
druk ze uit in een ondubbelzinnig formaat, zoals het exacte aantal minuten dat verschilt van UTC,
of het POSIX-tijdzoneformaat.
Ga er niet van uit dat het tijdperk begint om 00:00:00 uur, 1 januari 1970, want dat is OS- en
implementatiespecifiek. Het is beter om een datum in een eenduidige weergave op te slaan.
De ISO 8601-standaard definieert JJJJ-MM-DD als het datumformaat, oftewel JJJJ-MM-DDTHH:MM:SS
(dat is een letterlijke "T" die de datum scheidt van de tijd). Gebruik alstublieft de ISO 8601
in plaats van ons te laten raden welke datum 02/03/04 zou kunnen zijn. ISO 8601 sorteert zelfs netjes zoals het is.
Een tekstweergave (zoals "1987-12-18") kan eenvoudig worden omgezet in een besturingssysteemspecifieke weergave
waarde met behulp van een module zoals "Date::Parse". Een array met waarden, zoals de waarden die worden geretourneerd door
"localtime", kan worden geconverteerd naar een besturingssysteemspecifieke weergave met behulp van "Time::Local".
Bij het berekenen van specifieke tijden, bijvoorbeeld bij toetsen in tijd- of datummodules, kan dit wel het geval zijn
geschikt om een offset voor het tijdperk te berekenen.
vereisen Tijd::Lokaal;
mijn $offset = Tijd::Lokaal::timegm(0, 0, 0, 1, 0, 70);
De waarde voor $offset in Unix zal 0 zijn, maar in Mac OS Classic zal dit een groot getal zijn.
$offset kan vervolgens worden toegevoegd aan een Unix-tijdwaarde om te krijgen wat de juiste waarde zou moeten zijn
elk systeem.
Karakter sets en karakter codering
Veronderstel heel weinig over karaktersets.
Veronderstel niets over numerieke waarden ("ord", "chr") van karakters. Gebruik niet expliciet
codepuntbereiken (zoals "\xHH-\xHH)". Vanaf Perl v5.22 echter reguliere expressie
tekenklassebereiken tussen patroonhaakjes, gespecificeerd als "qr/[\N{U+HH}-\N{U+HH}]/" zijn
draagbaar. U kunt op draagbare wijze symbolische tekenklassen gebruiken, zoals "[:print:]".
Ga er niet van uit dat de alfabetische tekens aaneengesloten zijn gecodeerd (in het numerieke
gevoel). Er kunnen hiaten zijn. Speciale codering in Perl garandeert echter dat alle subsets
van "qr/[AZ]/", "qr/[az]/" en "qr/[0-9]/" gedragen zich zoals verwacht. "tr///" gedraagt zich hetzelfde
voor deze bereiken. In patronen: alle bereiken die zijn gespecificeerd met eindpunten met behulp van de "\N{...}"
notaties zorgen voor portabiliteit van tekensets, maar het is een bug in Perl v5.22 dat dit
geldt niet voor "tr///".
Ga niet uit van de volgorde van de karakters. De kleine letters mogen
kom voor of na de hoofdletters; de kleine letters en hoofdletters kunnen door elkaar zijn verweven
zodat zowel "a" als "A" vóór "b" komen; de geaccentueerde en andere internationale karakters
kan worden verweven zodat ae vóór "b" komt. Unicode::Collate kan worden gebruikt om dit te sorteren
allemaal uit.
Internationalisering
Als u POSIX mag aannemen (een vrij grote veronderstelling), kunt u meer lezen over de POSIX
locale-systeem van perllocale. Het locale systeem probeert op zijn minst dingen te maken
een beetje draagbaarder, of in ieder geval handiger en native-vriendelijk voor niet-Engels
gebruikers. Het systeem heeft invloed op tekensets en codering, en op datum en tijd
opmaak - onder andere.
Als je echt internationaal wilt zijn, moet je Unicode overwegen. Zie perluniintro en
perlunicode voor meer informatie.
Als u niet-ASCII-bytes (buiten de bytes 0x00..0x7f) wilt gebruiken in de "broncode" van
uw code, om draagbaar te zijn, moet u expliciet zijn over welke bytes ze zijn. Iemand
kan bijvoorbeeld uw code gebruiken onder een UTF-8-landinstelling, in welk geval willekeurig native
bytes kunnen illegaal zijn ("Malformed UTF-8...") Dit betekent dat bijvoorbeeld het insluiten van ISO
8859-1 bytes voorbij 0x7f in uw strings kunnen later problemen veroorzaken. Als de bytes dat zijn
native 8-bits bytes, u kunt het "bytes"-pragma gebruiken. Als de bytes zich in een string bevinden (regular
expressies zijn merkwaardige tekenreeksen), kunt u vaak ook de "\xHH" of draagbaarder gebruiken,
de notaties "\N{U+HH}" in plaats van de bytes zoals ze zijn in te sluiten. Als u uw wilt schrijven
code in UTF-8, kunt u utf8 gebruiken.
Systeem Informatiebronnen
Als uw code bestemd is voor systemen met ernstig beperkte (of ontbrekende!) virtuele
geheugensystemen dan u wilt zijn vooral bewust van het vermijden van verkwistende constructies zoals
als:
mijn @lines = <$very_large_file>; # slecht
while (<$fh>) {$file .= $_} # soms slecht
mijn $bestand = join('', <$fh>); # beter
De laatste twee constructies kunnen voor de meeste mensen niet intuïtief overkomen. De eerste groeit herhaaldelijk
een string, terwijl de tweede een groot deel van het geheugen in één keer toewijst. Op sommige
systemen is de tweede efficiënter dan de eerste.
Security
De meeste platforms voor meerdere gebruikers bieden basisbeveiligingsniveaus, meestal geïmplementeerd op de werkvloer
bestandssysteem niveau. Sommigen doen dat echter helaas niet. Dus het begrip gebruikers-ID, of
"home"-map, of zelfs de status van ingelogd zijn, kan voor velen onherkenbaar zijn
platforms. Als u programma's schrijft die veiligheidsbewust zijn, is het meestal het beste om dit te weten
onder welk type systeem u gaat draaien, zodat u expliciet code kunt schrijven
dat platform (of klasse van platforms).
Ga niet uit van de toegangssemantiek van het Unix-bestandssysteem: het besturingssysteem of het bestandssysteem
gebruikt mogelijk enkele ACL-systemen, die rijkere talen zijn dan de gebruikelijke "rwx". Zelfs als
de "rwx" bestaan, kan hun semantiek anders zijn.
(Vanuit veiligheidsoogpunt is het testen op machtigingen voordat u iets probeert te doen
hoe dan ook dom: als je dit probeert, is er potentieel voor raceomstandigheden. Iemand of
iets kan de machtigingen tussen de machtigingscontrole en de daadwerkelijke wijzigen
operatie. Probeer de bewerking gewoon.)
Ga niet uit van de Unix-gebruikers- en groepssemantiek: verwacht vooral niet $< en $> (of $(
en $)) om te werken voor het wisselen van identiteit (of lidmaatschappen).
Ga niet uit van de semantiek van set-uid en set-gid. (En zelfs als je dat doet, denk dan twee keer na: set-uid en
set-gid zijn een bekend blikje beveiligingswormen.)
Style
Voor die momenten waarop het nodig is om platformspecifieke code te hebben, kunt u overwegen om de
platformspecifieke code op één plek, waardoor porten naar andere platforms eenvoudiger wordt. Gebruik de
"Config"-module en de speciale variabele $^O om platforms te onderscheiden, zoals beschreven in
"PLATFORMEN".
Wees voorzichtig met de tests die u bij uw module of programma's levert. Modulecode kan volledig zijn
draagbaar, maar de tests zijn dat misschien niet. Dit gebeurt vaak wanneer tests uit andere voortkomen
verwerkt of externe programma's aanroept om te helpen bij het testen, of wanneer (zoals hierboven vermeld) de
tests veronderstellen bepaalde dingen over het bestandssysteem en de paden. Zorg ervoor dat u niet afhankelijk bent van a
specifieke uitvoerstijl voor fouten, zoals bij het controleren van $! na een mislukte systeemoproep.
Met behulp van $! voor iets anders dan het weergeven ervan als uitvoer is twijfelachtig (hoewel zie de
"Errno"-module voor het redelijk draagbaar testen op foutwaarde). Sommige platforms verwachten een
een bepaald uitvoerformaat, en Perl op die platforms is mogelijk dienovereenkomstig aangepast.
Het meest specifiek is dat u geen regex moet verankeren bij het testen van een foutwaarde.
CPAN Testers
Modules die naar CPAN worden geüpload, worden door verschillende vrijwilligers op verschillende platforms getest.
Deze CPAN-testers worden per e-mail op de hoogte gesteld van elke nieuwe upload en beantwoorden de lijst met
PASS, FAIL, NA (niet van toepassing op dit platform) of UNKNOWN (onbekend), samen met eventuele andere
relevante notaties.
Het doel van het testen is tweeledig: ten eerste om ontwikkelaars te helpen eventuele problemen in hun
code die opduikt vanwege een gebrek aan testen op andere platforms; twee, om gebruikers te bieden
met informatie over of een bepaalde module op een bepaald platform werkt.
Zie ook:
· Mailinglijst: [e-mail beveiligd]
· Testresultaten:http://www.cpantesters.org/>
PLATFORMS
Perl is gebouwd met een $^O-variabele die het besturingssysteem aangeeft waarop het is gebouwd.
Dit werd geïmplementeerd om code te versnellen die anders "Config" zou moeten gebruiken
gebruik de waarde van $Config{osname}. Natuurlijk, om meer gedetailleerde informatie te krijgen over de
systeem, is het zeker aan te raden om naar %Config te kijken.
%Config kan echter niet altijd worden vertrouwd, omdat het tijdens het compileren is gebouwd. Als perl
op één plaats is gebouwd en vervolgens naar elders is overgebracht, kunnen sommige waarden onjuist zijn. De waarden
kan zelfs achteraf zijn bewerkt.
Unix
Perl werkt op een verbijsterende verscheidenheid aan Unix en Unix-achtige platforms (zie bijvoorbeeld de meeste
bestanden in de hints/ map in de broncodekit). Op de meeste van deze systemen is de
waarde van $^O (vandaar ook $Config{'osname'}) wordt bepaald door kleine letters en
het verwijderen van interpunctie uit het eerste veld van de tekenreeks die wordt geretourneerd door "uname -a" (of
een soortgelijke opdracht) bij de shell-prompt of door het bestandssysteem te testen op de aanwezigheid van
bestanden met een unieke naam, zoals een kernel- of headerbestand. Hier zijn bijvoorbeeld een paar van de
populairdere Unix-smaken:
uname $^O $Config{'archname'}
--------------------------------------------
AIX aix aix
BSD/OS bsdos i386-bsdos
Darwin Darwin Darwin
DYNIX/ptx dynixptx i386-dynixptx
FreeBSD freebsd freebsd-i386
Haiku haiku BePC-haiku
Linux linux arm-linux
Linux linux armv5tel-linux
Linux linux i386-linux
Linux linux i586-linux
Linux linux ppc-linux
HP-UX hpux PA-RISC1.1
IRIX irix irix
Mac OS X Darwin Darwin
NeXT 3 volgende volgende vet
Volgende 4 volgende OPENSTEP-Mach
openbsd openbsd i386-openbsd
OSF1 dec_osf alfa-dec_osf
reliantunix-n svr4 RM400-svr4
SCO_SV sco_sv i386-sco_sv
SINIX-N svr4 RM400-svr4
sn4609 unicos CRAY_C90-unicos
sn6521 unicosmk t3e-unicosmk
sn9617 unico's CRAY_J90-unico's
SunOS solaris sun4-solaris
SunOS solaris i86pc-solaris
SunOS4 sunos sun4-sunos
Omdat de waarde van $Config{archname} afhankelijk kan zijn van de hardwarearchitectuur, kan dat ook
meer variëren dan de waarde van $^O.
DOS en Derivaten
Perl is al lang geporteerd naar microcomputers in Intel-stijl die draaien onder systemen als PC-DOS,
MS-DOS, OS/2 en de meeste Windows-platforms die u kunt noemen (behalve
Windows CE, als je dat meetelt). Gebruikers bekend met COMMAND.COM or CMD.EXE stijl schelpen
Houd er rekening mee dat elk van deze bestandsspecificaties subtiele verschillen kan hebben:
mijn $filespec0 = "c:/foo/bar/file.txt";
mijn $filespec1 = "c:\\foo\\bar\\file.txt";
mijn $filespec2 = 'c:\foo\bar\file.txt';
mijn $filespec3 = 'c:\\foo\\bar\\file.txt';
Systeemaanroepen accepteren "/" of "\" als padscheidingsteken. Echter, veel command-line
hulpprogramma's van DOS vintage behandelen "/" als het optievoorvoegsel, dus kunnen in de war raken door bestandsnamen
met "/". Afgezien van het aanroepen van externe programma's, zal "/" prima werken, en
waarschijnlijk beter, omdat het meer consistent is met het populaire gebruik en het probleem ervan vermijdt
onthouden wat je moet terugslaan en wat niet.
Het DOS FAT-bestandssysteem kan alleen bestandsnamen in "8.3"-stijl bevatten. Onder de "zaak-
ongevoelige, maar hoofdletterbehoudende" HPFS (OS/2) en NTFS (NT) bestandssystemen moet u mogelijk gebruiken
wees voorzichtig met case die wordt geretourneerd met functies zoals "readdir" of wordt gebruikt met functies zoals
"open" of "opendir".
DOS behandelt ook verschillende bestandsnamen als speciaal, zoals AUX, PRN, NUL, CON, COM1, LPT1,
LPT2, enz. Helaas werken deze bestandsnamen soms niet eens als u een
expliciet mapvoorvoegsel. Het is het beste om dergelijke bestandsnamen te vermijden als u wilt dat uw code dat doet
overdraagbaar zijn naar DOS en zijn derivaten. Het is moeilijk om te weten wat dit allemaal is,
helaas.
Gebruikers van deze besturingssystemen willen mogelijk ook gebruik maken van scripts zoals pl2bat.bat
or pl2cmd om wrappers rond uw scripts te plaatsen.
Newline ("\n") wordt door STDIO vertaald als "\015\012" bij het lezen van en schrijven naar bestanden
(zie "Nieuwe regels"). "binmode(FILEHANDLE)" zorgt ervoor dat "\n" vertaald wordt als "\012".
bestandshandvat. Omdat het op andere systemen niet mogelijk is, moet "binmode" worden gebruikt voor cross-
platformcode die zich bezighoudt met binaire gegevens. Ervan uitgaande dat je dat van tevoren beseft
uw gegevens zijn binair. Programma's voor algemene doeleinden zouden vaak niets van hun waarde moeten veronderstellen
data.
De $^O variabele en de $Config{archname} waarden voor verschillende DOSish perls zijn als volgt:
Besturingssysteem $^O $Config{archname} ID-versie
-------------------------------------------------- ------
MS-DOS-dos?
PC-DOS-dos?
Besturingssysteem/2 os2 ?
Windows 3.1? ? 0 3 01
Windows 95 MSWin32 MSWin32-x86 1 4 00
Windows 98 MSWin32 MSWin32-x86 1 4 10
Windows ME MSWin32 MSWin32-x86 1 ?
Windows NT MSWin32 MSWin32-x86 2 4 xx
Windows NT MSWin32 MSWin32-ALPHA 2 4 xx
Windows NT MSWin32 MSWin32-ppc 2 4 xx
Windows 2000 MSWin32 MSWin32-x86 2 5 00
Windows XP MSWin32 MSWin32-x86 2 5 01
Windows 2003 MSWin32 MSWin32-x86 2 5 02
Windows Vista MSWin32 MSWin32-x86 2 6 00
Windows 7 MSWin32 MSWin32-x86 2 6 01
Windows 7 MSWin32 MSWin32-x64 2 6 01
Windows 2008 MSWin32 MSWin32-x86 2 6 01
Windows 2008 MSWin32 MSWin32-x64 2 6 01
Windows CE MSWin32? 3
Cygwin cygwin cygwin
De verschillende MSWin32 Perl's kunnen het besturingssysteem waarop ze draaien onderscheiden via de waarde van de
vijfde element van de lijst geretourneerd door "Win32::GetOSVersion()". Bijvoorbeeld:
if ($^O eq 'MSWin32') {
mijn @os_version_info = Win32::GetOSVersion();
print +('3.1','95','NT')[$os_version_info[4]],"\n";
}
Er zijn ook "Win32::IsWinNT()" en "Win32::IsWin95()"; probeer "perldoc Win32", en vanaf
libwin32 0.19 (geen onderdeel van de kern-Perl-distributie) "Win32::GetOSName()". De zeer
portable "POSIX::uname()" zal ook werken:
c:\> perl -MPOSIX -we "print join '|', uname"
Windows NT|moonru|5.0|Build 2195 (Servicepack 2)|x86
Zie ook:
· De djgpp-omgeving voor DOS,http://www.delorie.com/djgpp/> en perldos.
· De EMX-omgeving voor DOS, OS/2, etc. [e-mail beveiligd],
<ftp://hobbes.nmsu.edu/pub/os2/dev/emx/> Ook perlos2.
· Bouw instructies voor Win32 in perlwin32, of onder de Cygnus-omgeving in
perlcygwin.
· De "Win32::*"-modules in Win32.
· De ActiveState-pagina's,http://www.activestate.com/>
· De Cygwin-omgeving voor Win32; LEESMIJ.cygwin (geïnstalleerd als perlcygwin),
<http://www.cygwin.com/>
· De U/WIN-omgeving voor Win32,http://www.research.att.com/sw/tools/uwin/>
· Bouwinstructies voor OS/2, perlos2
VMS
Perl op VMS wordt besproken in perlvms in de Perl-distributie.
De officiële naam van VMS is op het moment van schrijven OpenVMS.
Voor interactie met Perl vanuit de DCL-shell (Digital Command Language) is vaak een
andere reeks aanhalingstekens dan Unix-shells. Bijvoorbeeld:
$ perl -e "print ""Hallo wereld.\n"""
Hallo Wereld.
Er zijn verschillende manieren om uw Perl-scripts in DCL te verpakken . COM bestanden, als u dat bent
van plan. Bijvoorbeeld:
$ write sys$output "Hallo van DCL!"
$ als p1 .eqs. ""
$ en vervolgens perl -x 'f$environment("PROCEDURE")
$ anders perl -x - 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8
$ kaartspel/dollars="__END__"
#!/usr/bin/perl
print "Hallo van Perl!\n";
__EINDE__
$ eindif
Wees voorzichtig met "$ ASSIGN/nolog/user SYS$COMMAND: SYS$INPUT" als uw Perl-in-DCL-script
verwacht dingen te doen als "$read = ;".
Het VMS-besturingssysteem heeft twee bestandssystemen, aangeduid door hun on-disk-structuur (ODS)
niveau: ODS-2 en zijn opvolger ODS-5. De initiële port van Perl naar VMS dateert van vóór ODS-5,
maar bij alle huidige tests en ontwikkelingen wordt uitgegaan van ODS-5 en de mogelijkheden ervan, inclusief de behuizing
behoud, uitgebreide tekens in bestandsspecificaties en namen tot 8192 bytes lang.
Perl op VMS kan bestandsspecificaties in VMS- of Unix-stijl accepteren, zoals in een van de
volgende:
$ perl -ne "print if /perl_setup/i" SYS$LOGIN:LOGIN.COM
$ perl -ne "print als /perl_setup/i" / sys$login/login.com
maar niet een mengsel van beide zoals in:
$ perl -ne "print if /perl_setup/i" sys$login:/login.com
Kan sys$login:/login.com niet openen: syntaxisfout met bestandsspecificatie
Over het algemeen is de eenvoudigste weg naar portabiliteit altijd het opgeven van bestandsnamen in Unix-indeling
tenzij ze moeten worden verwerkt door eigen opdrachten of hulpprogramma's. Daarom
Bij laatstgenoemde overweging retourneert de File::Spec-module standaard het oorspronkelijke formaat
specificaties, ongeacht het invoerformaat. Deze standaard kan worden omgekeerd, zodat filenames
worden altijd gerapporteerd in Unix-indeling door de functie "DECC$FILENAME_UNIX_REPORT" op te geven
logisch in de omgeving.
Het bestandstype of de extensie is altijd aanwezig in een bestandsspecificatie in VMS-formaat, zelfs als
het heeft een lengte van nul. Dit betekent dat "readdir" standaard een punt op a retourneert
bestand zonder extensie, dus waar u op Unix "a" zou zien, ziet u "a." op VMS.
De laatste punt kan echter worden onderdrukt door de optie "DECC$READDIR_DROPDOTNOTYPE" in te schakelen
functie in de omgeving (zie de CRTL-documentatie over logische namen van functies).
Wat "\n" vertegenwoordigt, hangt af van het type bestand dat is geopend. Het vertegenwoordigt meestal "\012", maar
het kan ook "\015", "\012", "\015\012", "\000", "\040" of niets zijn, afhankelijk van de
bestandsorganisatie en recordformaat. De module "VMS::Stdio" biedt toegang tot de
speciale "fopen()"-vereisten voor bestanden met ongebruikelijke attributen op VMS.
De waarde van $^O op OpenVMS is "VMS". Om de architectuur te bepalen die u gebruikt
raadpleeg $Config{'archname'}.
Op VMS bepaalt perl de UTC-offset op basis van de logische naam "SYS$TIMEZONE_DIFFERENTIAL".
Hoewel het VMS-tijdperk begon op 17 november 1858 00:00:00.00, worden oproepen naar "lokale tijd" aangepast
om offsets te tellen vanaf 01-JAN-1970 00:00:00.00, net als Unix.
Zie ook:
· LEESMIJ.vms (geïnstalleerd als README_vms), perlvms
· vmsperl-lijst, [e-mail beveiligd]
· vmsperl op internet,http://www.sidhe.org/vmsperl/index.html>
· VMS Software Inc.-website,http://www.vmssoftware.com>
UW
Perl op VOS (ook bekend als OpenVOS) wordt besproken in README.vos in de Perl-distributie
(geïnstalleerd als perlvos). Perl op VOS kan zowel VOS- als Unix-stijl bestanden accepteren
specificaties zoals in een van de volgende:
$ perl -ne "print if /perl_setup/i" >systeem>meldingen
$ perl -ne "print if /perl_setup/i" /system/notices
of zelfs een mengsel van beide, zoals in:
$ perl -ne "print if /perl_setup/i" >systeem/kennisgevingen
Ook al staat VOS toe dat het slash-teken in objectnamen verschijnt, omdat de VOS-poort
van Perl interpreteert het als een padnaam dat teken, VOS-bestanden, mappen of koppelingen begrenst
waarvan de namen een schuine streep bevatten, kunnen niet worden verwerkt. Dergelijke bestanden moeten worden hernoemd
voordat ze door Perl kunnen worden verwerkt.
Oudere releases van VOS (vóór OpenVOS Release 17.0) beperken bestandsnamen tot 32 of minder
tekens, verbied dat bestandsnamen beginnen met een "-" teken, en verbied bestanden
namen mogen geen tekens bevatten die overeenkomen met "tr/ !#%&'()*;<=>?//".
Nieuwere releases van VOS (OpenVOS Release 17.0 of hoger) ondersteunen een functie die bekend staat als extended
namen. Op deze releases zijn bestandsnamen uit maximaal 255 tekens verboden
beginnend met een "-" teken, en de reeks verboden tekens wordt teruggebracht tot elk teken
teken dat overeenkomt met "tr/#%*<>?//". Er zijn beperkingen met betrekking tot spaties en
apostrofs: deze tekens mogen niet beginnen of eindigen met een naam, en dat mogen ze ook niet onmiddellijk doen
voorafgaan aan of volgen op een periode. Bovendien mag een spatie niet onmiddellijk vóór een andere spatie staan
spatie of koppelteken. Concreet zijn de volgende tekencombinaties verboden:
spatie-ruimte, spatie-koppelteken, periode-ruimte, spatie-periode, periode-apostrof, apostrof-
punt, voor- of achterspatie, en voor- of achterapostrof. Hoewel een
uitgebreide bestandsnaam is beperkt tot 255 tekens, een padnaam is nog steeds beperkt tot 256 tekens
tekens.
De waarde van $^O op VOS is "vos". Om de architectuur te bepalen waarop u draait
zonder uw toevlucht te nemen tot het laden van %Config, kunt u de inhoud van de @INC-array bekijken
zoals zo:
als ($^O =~ /vos/) {
print "Ik gebruik een Stratus-box!\n";
} Else {
print "Ik zit niet op een Stratus-box!\n";
sterven;
}
Zie ook:
· README.vos (geïnstalleerd als perlvos)
· De VOS-mailinglijst.
Er is geen specifieke mailinglijst voor Perl op VOS. U kunt contact opnemen met Stratus
Technologies Customer Assistance Center (CAC) voor uw regio, of u kunt gebruik maken van het
contactgegevens in de distributiebestanden op de Stratus Anonymous FTP
site.
· Stratus Technologies op internet ophttp://www.stratus.com>
· VOS Open-Source-software op internet ophttp://ftp.stratus.com/pub/vos/vos.html>
EBCDIC platforms
v5.22 core Perl draait op z/OS (voorheen OS/390). Theoretisch zou het kunnen draaien op de
opvolgers van OS/400 op AS/400 minicomputers, evenals VM/ESA, en BS2000 voor S/390
Mainframes. Dergelijke computers gebruiken intern EBCDIC-tekensets (meestal tekencode
Stel ID 0037 in voor OS/400 en 1047 of POSIX-BC voor S/390-systemen).
De rest van dit gedeelte moet mogelijk worden bijgewerkt, maar we weten niet wat daarin moet staan. Alsjeblieft
opmerkingen mailen naar [e-mail beveiligd] <mailto:[e-mail beveiligd]>.
Op het mainframe werkt Perl momenteel onder de "Unix-systeemservices voor OS/390"
(voorheen bekend als OpenEdition), VM/ESA OpenEdition of het BS200 POSIX-BC-systeem (BS2000
wordt ondersteund in Perl 5.6 en hoger). Zie perlos390 voor details. Houd er rekening mee dat voor OS/400
er is ook een port van Perl 5.8.1/5.10.0 of hoger naar de PASE die op ASCII is gebaseerd (zoals
in tegenstelling tot ILE dat op EBCDIC is gebaseerd), zie perlos400.
Vanaf R2.5 van USS voor OS/390 en versie 2.3 van VM/ESA werken deze Unix-subsystemen niet meer
steun de "#!" shebang-truc voor het aanroepen van scripts. Dus op OS/390 en VM/ESA Perl
scripts kunnen worden uitgevoerd met een header die lijkt op het volgende eenvoudige script:
: # gebruik perl
eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
indien 0;
#!/usr/local/bin/perl # eigenlijk gewoon een opmerking
print "Hallo van perl!\n";
OS/390 ondersteunt de "#!" shebang-truc in release 2.8 en hoger. Oproepen naar "systeem"
en backticks kunnen de POSIX-shell-syntaxis gebruiken op alle S/390-systemen.
Als PERL400 op de AS/5 in uw bibliotheeklijst staat, moet u mogelijk uw Perl-scripts inpakken
een CL-procedure om ze als volgt aan te roepen:
BEGINNEN
CALL PGM(PERL5/PERL) PARM('/QOpenSys/hello.pl')
ENDPGM
Hierdoor wordt het Perl-script aangeroepen hallo.pl in de root van het QOpenSys-bestandssysteem. Op de
AS/400-aanroepen naar "systeem" of backticks moeten CL-syntaxis gebruiken.
Houd er op deze platforms rekening mee dat de EBCDIC-tekenset een effect kan hebben op wat
gebeurt met sommige Perl-functies (zoals "chr", "pack", "print", "printf", "ord", "sort",
"sprintf", "unpack"), evenals bit-gerommel met ASCII-constanten met behulp van operators zoals
"^", "&" en "|", om nog maar te zwijgen van het omgaan met socketinterfaces naar ASCII-computers (zie
"Nieuwe regels").
Gelukkig vertalen de meeste webservers voor het mainframe de "\n" in de
volgende verklaring naar het ASCII-equivalent ("\r" is hetzelfde onder zowel Unix als z/OS):
print "Inhoudstype: tekst/html\r\n\r\n";
De waarden van $^O op sommige van deze platforms omvatten:
uname $^O $Config{'archname'}
--------------------------------------------
Besturingssysteem/390 os390 os390
OS400, os400, os400
POSIX-BC posix-bc BS2000-posix-bc
Enkele eenvoudige trucs om te bepalen of u op een EBCDIC-platform draait, kunnen zijn:
een van de volgende (misschien allemaal):
if ("\t" eq "\005") { print "EBCDIC kan hier worden uitgesproken!\n"; }
if (ord('A') == 193) { print "EBCDIC kan hier worden uitgesproken!\n"; }
if (chr(169) eq 'z') { print "EBCDIC kan hier worden gesproken!\n"; }
Eén ding waar u misschien niet op wilt vertrouwen, is de EBCDIC-codering van leestekens
aangezien deze kunnen verschillen van codepagina tot codepagina (en zodra uw module of script dat is
het gerucht gaat dat het met EBCDIC werkt, mensen zullen willen dat het met alle EBCDIC-tekensets werkt).
Zie ook:
· perlos390, perlos400, perlbs2000, perlebcdic.
· De [e-mail beveiligd] De lijst is bedoeld voor de bespreking van porteringskwesties en voor algemene onderwerpen
gebruiksproblemen voor alle EBCDIC Perls. Stuur een berichttekst van "subscribe perl-mvs" naar
[e-mail beveiligd].
· AS/400 Perl-informatie ophttp://as400.rochester.ibm.com/> evenals op CPAN in de
havens/ directory.
eikel RISICO OS
Omdat Acorns ASCII gebruiken met nieuwe regels ("\n") in tekstbestanden als "\012" zoals Unix, en
Omdat emulatie van Unix-bestandsnamen standaard is ingeschakeld, zullen de meeste eenvoudige scripts dit waarschijnlijk doen
‘out of the box’ werken. Het oorspronkelijke bestandssysteem is modulair, en individuele bestandssystemen zijn dat ook
vrij om hoofdlettergevoelig of ongevoelig te zijn, en zijn meestal hoofdletterbehoudend. Sommigen inheems
bestandssystemen hebben limieten voor de naamlengte, waarbij bestands- en mapnamen stilzwijgend worden afgekapt
passen. Scripts moeten zich ervan bewust zijn dat het standaardbestandssysteem momenteel een naamlengte heeft
limiet van 10 tekens, met maximaal 77 items in een directory, maar andere bestandssystemen mogelijk niet
dergelijke beperkingen opleggen.
Native bestandsnamen hebben de vorm
Bestandssysteem#Speciaal veld::Schijfnaam.$.Directory.Directory.File
met de meeste
Special_Field is meestal niet aanwezig, maar kan . en $.
Bestandssysteem =~ m|[A-Za-z0-9_]|
DsicNaam =~ m|[A-Za-z0-9_/]|
$ vertegenwoordigt de hoofdmap
. is de padscheidingsteken
@ is de huidige map (per bestandssysteem maar machine globaal)
^ is de bovenliggende map
Directory en bestand =~ m|[^\0- "\.\$\%\&:\@\\^\|\177]+|
De standaardvertaling van de bestandsnaam is grofweg "tr|/.|./|;"
Merk op dat ""ADFS::HardDisk.$.File" ne 'ADFS::HardDisk.$.File'" en dat de tweede fase
van "$"-interpolatie in reguliere expressies zal in strijd zijn met de $. als scripts dat niet zijn
voorzichtig.
Logische paden die worden gespecificeerd door systeemvariabelen die door komma's gescheiden zoeklijsten bevatten, zijn dat wel
ook toegestaan; vandaar dat "Systeem:Modules" een geldige bestandsnaam is en dat het bestandssysteem een voorvoegsel heeft
"Modules" met elke sectie van "System$Path" totdat er een naam is gemaakt die naar een object verwijst
op schijf. Schrijven naar een nieuw bestand "System:Modules" zou alleen toegestaan zijn als "System$Path"
bevat een lijst met enkele items. Het bestandssysteem zal ook systeemvariabelen uitbreiden in
bestandsnamen indien tussen punthaken, dus " .Modules" zoekt naar het bestand
"$ENV{'Systeem$Dir'} . 'Modules'". De voor de hand liggende implicatie hiervan is dat geheel bevoegd
bestandsnamen blikje begin with "<>" en moet worden beschermd wanneer "open" wordt gebruikt voor invoer.
Omdat "." werd gebruikt als directoryscheidingsteken en er kon niet van worden uitgegaan dat dit het geval was
uniek na 10 tekens, Acorn implementeerde de C-compiler om de achterliggende ".c" te verwijderen
".h" ".s" en ".o" achtervoegsel van bestandsnamen die zijn opgegeven in de broncode en slaan de respectieve op
bestanden in submappen genoemd naar het achtervoegsel. Daarom worden bestanden vertaald:
foo.h h.foo
C:foo.h C:h.foo (logische padvariabele)
sys/os.h sys.h.os (C-compiler groks Unix-speak)
10tekennaam.c c.10tekennaam
10tekennaam.o o.10tekennaam
11charname_.c c.11charname (ervan uitgaande dat het bestandssysteem wordt afgekapt op 10)
De vertaling van bestandsnamen door de Unix-emulatiebibliotheek naar native gaat ervan uit dat dit soort
vertaling is vereist, en het maakt een door de gebruiker gedefinieerde lijst met bekende achtervoegsels mogelijk
op deze manier omzetten. Dit lijkt misschien transparant, maar houd daar rekening mee met deze regels
foo/bar/baz.h en foo/bar/u/baz beide in kaart brengen foo.bar.h.baz, en dat "readdir" en "glob"
kan en probeer niet de omgekeerde mapping te emuleren. Andere "."'s in bestandsnamen zijn
vertaald naar "/".
Zoals hierboven geïmpliceerd, is de omgeving waartoe toegang wordt verkregen via %ENV mondiaal, en dat is ook de conventie
dat programmaspecifieke omgevingsvariabelen de vorm "Program$Name" hebben. Elk
bestandssysteem onderhoudt een huidige map en de huidige map van het huidige bestandssysteem
is de globaal huidige map. Bijgevolg veranderen sociale programma's de stroom niet
directory, maar vertrouwen op volledige padnamen, en programma's (en Makefiles) kunnen er niet van uitgaan dat dit het geval is
kan een onderliggend proces voortbrengen dat de huidige map kan wijzigen zonder de map te beïnvloeden
ouder (en alle anderen trouwens).
Omdat de bestandshandles van het eigen besturingssysteem globaal zijn en momenteel zijn toegewezen
vanaf 255, waarbij 0 een gereserveerde waarde is, emuleert de Unix-emulatiebibliotheek Unix
bestandshandvatten. Daarom kunt u er niet op vertrouwen dat u "STDIN", "STDOUT" of "STDERR" doorgeeft aan
uw kinderen.
De wens van gebruikers om bestandsnamen van het formulier uit te drukken " .Bar" op de opdrachtregel
niet-geciteerd veroorzaakt ook problemen: het vastleggen van de uitvoer van de opdracht "``" moet een raadspelletje uitvoeren.
Er wordt van uitgegaan dat een tekenreeks "<[^<>]+\$[^<>]>" een verwijzing is naar een omgevingsvariabele,
terwijl al het andere waarbij "<" of ">" betrokken is, omleiding is en over het algemeen 99% bedraagt
rechts. Het probleem blijft natuurlijk dat scripts niet kunnen vertrouwen op Unix-tools
beschikbaar zijn, of dat gevonden tools Unix-achtige opdrachtregelargumenten hebben.
Extensies en XS kunnen in theorie door iedereen worden gebouwd met behulp van gratis tools. In de praktijk veel
niet doen, aangezien gebruikers van het Acorn-platform gewend zijn aan binaire distributies. MakeMaker wel
run, maar geen enkel beschikbaar merk kan momenteel de makefiles van MakeMaker aan; zelfs als en wanneer
dit zou opgelost moeten worden, het ontbreken van een Unix-achtige shell zal problemen veroorzaken met makefile
regels, vooral regels in de vorm "cd sdbm && make all", en alles waarbij aanhalingstekens worden gebruikt.
"RISC OS" is de juiste naam voor het besturingssysteem, maar de waarde in $^O is "riscos"
(omdat we niet van schreeuwen houden).
Overige parels
Perl is geporteerd naar veel platforms die niet in een van de genoemde categorieën passen
boven. Sommige, zoals AmigaOS, QNX, Plan 9 en VOS, zijn goed geïntegreerd in de
standaard Perl-broncodekit. Mogelijk moet u de havens/ directory op CPAN voor
informatie, en mogelijk binaire bestanden, voor bijvoorbeeld: aos, Atari ST, lynxos, riscos,
Novell NetWare, Tandem Guardian, enz. (Ja, we weten dat sommige van deze besturingssystemen kunnen vallen
onder de Unix-categorie, maar we zijn geen standaardorganisatie.)
Enkele geschatte namen van besturingssystemen en hun $^O-waarden in de categorie 'OVERIG'
omvatten:
Besturingssysteem $^O $Config{'archname'}
------------------------------------------
Amiga DOS-amiga's m68k-amigo's
Zie ook:
· Amiga, README.amiga (geïnstalleerd als perlamiga).
· Een gratis op perl5 gebaseerde PERL.NLM voor Novell Netware is beschikbaar in vooraf gecompileerde binaire en
broncodeformulier vanhttp://www.novell.com/> en ook van CPAN.
· Plan 9, LEESMIJ.plan9
FUNCTIE IMPLEMENTATIES
Hieronder vindt u functies die ofwel volledig niet zijn geïmplementeerd, ofwel dat wel zijn geweest
verschillend geïmplementeerd op verschillende platforms. Na elke beschrijving volgt in
tussen haakjes, een lijst met platforms waarop de beschrijving van toepassing is.
De lijst is mogelijk onvolledig of op sommige plaatsen zelfs onjuist. Raadpleeg bij twijfel de
platformspecifieke README-bestanden in de Perl-brondistributie en alle andere
documentatiebronnen die bij een bepaalde haven horen.
Houd er bovendien rekening mee dat er zelfs onder Unix-achtige systemen variaties bestaan.
Voor veel functies kunt u ook %Config opvragen, standaard geëxporteerd vanuit "Config"
module. Als u bijvoorbeeld wilt controleren of het platform de aanroep "lstat" heeft, controleert u
$Config{d_lstat}. Zie Config voor een volledige beschrijving van de beschikbare variabelen.
Alfabetisch Listing of Perl Functies
-X "-w" inspecteert alleen het alleen-lezen bestandskenmerk (FILE_ATTRIBUTE_READONLY), dat
bepaalt of de map kan worden verwijderd, niet of er naar kan worden geschreven.
Directory's hebben altijd lees- en schrijftoegang, tenzij dit door een discretionaire bevoegdheid wordt geweigerd
toegangscontrolelijsten (DACL's). (Win32)
"-r", "-w", "-x" en "-o" geven aan of het bestand toegankelijk is, maar dat is mogelijk niet het geval
weerspiegelen op UIC gebaseerde bestandsbeveiligingen. (VMS)
"-s" op naam in een geopend bestand retourneert de gereserveerde ruimte op schijf, in plaats van
de huidige omvang. "-s" op een geopende bestandshandle retourneert de huidige grootte.
(RISC-besturingssysteem)
"-R", "-W", "-X", "-O" zijn niet te onderscheiden van "-r", "-w", "-x", "-o". (Win32,
VMS, RISC-besturingssysteem)
"-g", "-k", "-l", "-u", "-A" zijn niet bijzonder betekenisvol. (Win32, VMS,
RISC-besturingssysteem)
"-p" is niet bijzonder betekenisvol. (VMS, RISC-besturingssysteem)
"-d" is waar als er een apparaatspecificatie wordt doorgegeven zonder een expliciete map. (VMS)
"-x" (of "-X") bepaalt of een bestand eindigt op een van de uitvoerbare achtervoegsels. "-S"
is zinloos. (Win32)
"-x" (of "-X") bepaalt of een bestand een uitvoerbaar bestandstype heeft. (RISC-besturingssysteem)
alarm Geëmuleerd met behulp van timers die expliciet moeten worden opgevraagd wanneer Perl dat wil
verzendt "veilige signalen" en kan daarom blokkerende systeemoproepen niet onderbreken.
(Win32)
atan2 Vanwege problemen met verschillende CPU's, wiskundebibliotheken, compilers en standaarden, resultaten
for "atan2()" kan variëren, afhankelijk van elke combinatie van het bovenstaande. Perl-pogingen
om te voldoen aan de Open Group/IEEE-standaarden voor de resultaten waaruit wordt geretourneerd
"atan2()", maar kan het probleem niet forceren als het systeem waarop Perl wordt uitgevoerd dit niet toestaat
Het. (Tru64, HP-UX 10.20)
De huidige versie van de standaarden voor "atan2()" is beschikbaar op
<http://www.opengroup.org/onlinepubs/009695399/functions/atan2.html>.
binmode Betekenisloos. (RISC-besturingssysteem)
Heropent het bestand en herstelt de aanwijzer; als de functie mislukt, kan de onderliggende filehandle dit zijn
gesloten, of de wijzer bevindt zich mogelijk in een andere positie. (VMS)
De waarde die wordt geretourneerd door "tell" kan worden beïnvloed na de aanroep en de filehandle
kan worden doorgespoeld. (Win32)
chmod Alleen goed voor het wijzigen van de lees- en schrijftoegang van "eigenaar", "groep" en "andere" bits
zinloos. (Win32)
Alleen goed voor het wijzigen van "eigenaar" en "andere" lees-schrijftoegang. (RISC-besturingssysteem)
Toegangsrechten worden toegewezen aan wijzigingen in de VOS-toegangscontrolelijst. (VOS)
De feitelijke ingestelde machtigingen zijn afhankelijk van de waarde van de "CYGWIN" in het SYSTEEM
omgeving instellingen. (Cygwin)
Het instellen van de exec-bit op sommige locaties (in het algemeen / sdcard) zal true but retourneren
de bit niet daadwerkelijk ingesteld. (Androïde)
chown Niet geïmplementeerd. (Win32, Plan 9, RISC-besturingssysteem)
Doet niets, maar zal niet falen. (Win32)
Een beetje funky, omdat het eigendomsbegrip van VOS een beetje funky is (VOS).
chroot Niet geïmplementeerd. (Win32, VMS, Plan 9, RISC OS, VOS)
crypt Is mogelijk niet beschikbaar als er geen bibliotheek of bron is opgegeven bij het bouwen van perl.
(Win32)
Niet geïmplementeerd. (Androïde)
dbmsluiten
Niet geïmplementeerd. (VMS, Plan 9, VOS)
dbmopen Niet geïmplementeerd. (VMS, Plan 9, VOS)
dumpen Niet nuttig. (RISC-besturingssysteem)
Niet ondersteund. (Cygwin, Win32)
Roept VMS-foutopsporing aan. (VMS)
exec "exec LIST" zonder het gebruik van de syntaxis van indirecte objecten ("exec PROGRAM LIST") kan
val terug naar het proberen van de shell als de eerste "spawn()" mislukt. (Win32)
Spoelt uitvoerhendels op sommige platforms niet automatisch door. (SunOS, Solaris,
HP-UX)
Niet ondersteund. (Symbian-besturingssysteem)
exit Emuleert Unix "exit()" (waarbij "exit 1" wordt beschouwd als een fout) door
de 1 naar "SS$_ABORT" (44). Dit gedrag kan worden overschreven met het pragma "use
vmsish 'exit'". Net als bij de functie "exit()" van de CRTL, wordt "exit 0" ook toegewezen aan
een afsluitstatus van "SS$_NORMAL" (1); deze toewijzing kan niet worden overschreven. Elke andere
argument voor "exit()" wordt rechtstreeks gebruikt als de afsluitstatus van Perl. Op VMS, tenzij de
toekomstige POSIX_EXIT-modus is ingeschakeld, moet de exitcode altijd een geldige VMS-exit zijn
code en geen generiek nummer. Wanneer de POSIX_EXIT-modus is ingeschakeld, wordt er een generiek
nummer wordt gecodeerd in een methode die compatibel is met de macro C-bibliotheek _POSIX_EXIT
zodat het kan worden gedecodeerd door andere programma's, vooral programma's geschreven in C, zoals
het GNV-pakket. (VMS)
"exit()" reset de bestandsaanwijzers, wat een probleem is als het wordt aangeroepen vanuit een onderliggend proces
(gemaakt door "fork()") in "BEGIN". Een oplossing is om "POSIX::_exit" te gebruiken.
(Solaris)
afsluiten tenzij $Config{archname} =~ /\bsolaris\b/;
vereisen POSIX en POSIX::_Uitgang(0);
fcntl Niet geïmplementeerd. (Win32)
Sommige functies zijn beschikbaar op basis van de versie van VMS. (VMS)
kudde Niet geïmplementeerd (VMS, RISC OS, VOS).
vork Niet geïmplementeerd. (AmigaOS, RISC-besturingssysteem, VMS)
Geëmuleerd met behulp van meerdere tolken. Zie perlfork. (Win32)
Spoelt uitvoerhendels op sommige platforms niet automatisch door. (SunOS, Solaris,
HP-UX)
inloggen
Niet geïmplementeerd. (RISC-besturingssysteem)
getpgrp Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem)
getppid Niet geïmplementeerd. (Win32, RISC-besturingssysteem)
prioriteit krijgen
Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem, VOS)
krijgpwnam
Niet geïmplementeerd. (Win32)
Niet bruikbaar. (RISC-besturingssysteem)
krijg grnam
Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem)
getnetbijnaam
Niet geïmplementeerd. (Android, Win32, Plan 9)
krijgpwuid
Niet geïmplementeerd. (Win32)
Niet bruikbaar. (RISC-besturingssysteem)
getgrid
Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem)
getnetbyadr
Niet geïmplementeerd. (Android, Win32, Plan 9)
krijg prototype op nummer
Niet geïmplementeerd. (Androïde)
krijgservbyport
ben gegaan
Niet geïmplementeerd. (Android, Win32)
krijgen
Niet geïmplementeerd. (Android, Win32, VMS)
gethostbijnaam
"gethostbyname('localhost')" werkt niet overal: mogelijk moet u dit gebruiken
"gethostbyname('127.0.0.1')". (Irix 5)
ontvangen
Niet geïmplementeerd. (Win32)
ontvangen
Niet geïmplementeerd. (Android, Win32, Plan 9)
krijg protoent
Niet geïmplementeerd. (Android, Win32, Plan 9)
ontvangserveer
Niet geïmplementeerd. (Win32, Plan 9)
seekdir Niet geïmplementeerd. (Androïde)
stelhostent
Niet geïmplementeerd. (Android, Win32, Plan 9, RISC OS)
ingesteld
Niet geïmplementeerd. (Win32, Plan 9, RISC-besturingssysteem)
stel protoent
Niet geïmplementeerd. (Android, Win32, Plan 9, RISC OS)
dienstdoende
Niet geïmplementeerd. (Plan 9, Win32, RISC besturingssysteem)
eindpunt
Niet geïmplementeerd. (Win32)
Ofwel niet geïmplementeerd, ofwel een no-op. (Androïde)
eindgrens
Niet geïmplementeerd. (Android, RISC-besturingssysteem, VMS, Win32)
eindgastheer
Niet geïmplementeerd. (Android, Win32)
eindnet
Niet geïmplementeerd. (Android, Win32, Plan 9)
eindproduct
Niet geïmplementeerd. (Android, Win32, Plan 9)
einddienaar
Niet geïmplementeerd. (Plan 9, Win32)
krijgtockopt SOCKET,LEVEL,OPTNAME
Niet geïmplementeerd. (Plan 9)
glob Deze operator wordt op de meeste platforms geïmplementeerd via de extensie "File::Glob".
Zie File::Glob voor informatie over overdraagbaarheid.
gmtime In theorie is "gmtime()" betrouwbaar van -2**63 tot 2**63-1. Echter, omdat werk
ronden in de implementatie gebruiken drijvende-kommagetallen, het zal worden
onnauwkeurig naarmate de tijd groter wordt. Dit is een bug en zal worden opgelost in de
toekomst.
Op VOS zijn tijdwaarden 32-bits grootheden.
ioctl FILEHANDLE,FUNCTION,SCALAIR
Niet geïmplementeerd. (VMS)
Alleen beschikbaar voor sockethandles, en het doet wat de "ioctlsocket()" aanroept
de Winsock API doet dat wel. (Win32)
Alleen beschikbaar voor stopcontacthandgrepen. (RISC-besturingssysteem)
kill Niet geïmplementeerd, dus niet bruikbaar voor controle op besmetting. (RISC-besturingssysteem)
"kill()" heeft niet de semantiek van "raise()", dwz het stuurt geen signaal naar
het geïdentificeerde proces zoals het dat doet op Unix-platforms. In plaats daarvan "kill($sig, $pid)"
beëindigt het proces geïdentificeerd door $pid, en zorgt ervoor dat het onmiddellijk wordt afgesloten met exit
status $sig. Net als in Unix geldt dat als $sig 0 is en het opgegeven proces bestaat, dat ook het geval is
retourneert true zonder het daadwerkelijk te beëindigen. (Win32)
"kill(-9, $pid)" beëindigt het proces gespecificeerd door $pid en recursief all
onderliggende processen die er eigendom van zijn. Dit verschilt van de Unix-semantiek, waarbij de
signaal wordt afgegeven aan alle processen in dezelfde procesgroep als het proces
gespecificeerd door $pid. (Win32)
Wordt niet ondersteund voor procesidentificatienummers van 0 of negatieve getallen. (VMS)
link Niet geïmplementeerd. (RISC-besturingssysteem, VOS)
Het aantal links is niet bijgewerkt omdat harde links niet zo moeilijk zijn (ze zijn soort
halverwege tussen harde en zachte schakels). (AmigaOS)
Harde links worden alleen in Win32 onder NTFS geïmplementeerd. Ze worden native ondersteund
op Windows 2000 en hoger. Op Windows NT worden ze geïmplementeerd met behulp van Windows
Voor ondersteuning van het POSIX-subsysteem en het Perl-proces is een beheerder of back-up nodig
Operatorrechten om harde koppelingen te maken.
Beschikbaar op 64-bit OpenVMS 8.2 en hoger. (VMS)
lokale tijd
lokale tijd() heeft hetzelfde bereik als "gmtime", maar omdat de tijdzoneregels het bereik veranderen
De nauwkeurigheid voor historische en toekomstige tijden kan afnemen, maar meestal niet meer dan
een uur.
lstat Niet geïmplementeerd. (RISC-besturingssysteem)
Retourwaarden (vooral voor apparaat en inode) kunnen nep zijn. (Win32)
bericht
bericht
bericht
msgrcv Niet geïmplementeerd. (Android, Win32, VMS, Plan 9, RISC OS, VOS)
open open voor "|-" en "-|" worden niet ondersteund. (Win32, RISC-besturingssysteem)
Bij het openen van een proces worden de uitvoerhandvatten op sommige platforms niet automatisch leeggemaakt.
(SunOS, Solaris, HP-UX)
leeslink
Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem)
hernoemen Kan geen mappen verplaatsen tussen mappen op verschillende logische volumes. (Win32)
terugspoelendir
Zal er niet voor zorgen dat "readdir()" de directorystream opnieuw leest. De inzendingen al
read before de "rewinddir()"-aanroep wordt gewoon opnieuw uit een cache geretourneerd
buffer. (Win32)
selecteer Alleen geïmplementeerd op sockets. (Win32, VMS)
Alleen betrouwbaar op stopcontacten. (RISC-besturingssysteem)
Merk op dat het formulier "select FILEHANDLE" over het algemeen draagbaar is.
semctl
semget
semop Niet geïmplementeerd. (Android, Win32, VMS, RISC-besturingssysteem)
setgrent
Niet geïmplementeerd. (Android, VMS, Win32, RISC-besturingssysteem)
setpgrp Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem, VOS)
prioriteit instellen
Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem, VOS)
ingesteld
Niet geïmplementeerd. (Android, Win32, RISC-besturingssysteem)
setstockopt
Niet geïmplementeerd. (Plan 9)
shmctl
shmget
lees
shmschrijven
Niet geïmplementeerd. (Android, Win32, VMS, RISC-besturingssysteem)
sleep Geëmuleerd met behulp van synchronisatiefuncties, zodat deze kan worden onderbroken door
"alarm()", en beperkt tot maximaal 4294967 seconden, ongeveer 49 dagen.
(Win32)
sokkenmerk
Een relatief recente toevoeging aan socket-functies, kan zelfs in
Unix-platforms.
socketpaar
Niet geïmplementeerd. (RISC-besturingssysteem)
Beschikbaar op 64-bit OpenVMS 8.2 en hoger. (VMS)
stat Platforms die geen rdev, blksize of blokken hebben, zullen deze retourneren als '', so
numerieke vergelijking of manipulatie van deze velden kan leiden tot 'niet numerieke'
waarschuwingen.
ctime niet ondersteund op UFS (Mac OS X).
ctime is de aanmaaktijd in plaats van de inode-wijzigingstijd (Win32).
device en inode zijn niet betekenisvol. (Win32)
apparaat en inode zijn niet noodzakelijkerwijs betrouwbaar. (VMS)
mtime, atime en ctime retourneren allemaal de laatste wijzigingstijd. Apparaat en inode
zijn niet noodzakelijkerwijs betrouwbaar. (RISC-besturingssysteem)
dev, rdev, blksize en blokken zijn niet beschikbaar. inode is niet betekenisvol en
zal verschillen tussen statistische oproepen in hetzelfde bestand. (os2)
sommige versies van cygwin bij het uitvoeren van een "stat("foo")" en als je deze niet kunt vinden, kan dat dan gebeuren
probeer "stat("foo.exe")" (Cygwin)
Op Win32 moet "stat()" het bestand openen om het aantal links te bepalen en bij te werken
attributen die mogelijk zijn gewijzigd via harde links. Instelling
"${^WIN32_SLOPPY_STAT}" naar een echte waarde versnelt "stat()" door dit niet uit te voeren
operatie. (Win32)
symlink Niet geïmplementeerd. (Win32, RISC-besturingssysteem)
Geïmplementeerd op 64 bit VMS 8.3. VMS vereist dat de symbolische link zich in Unix bevindt
syntaxis als het de bedoeling is om naar een geldig pad om te zetten.
syscall Niet geïmplementeerd. (Win32, VMS, RISC-besturingssysteem, VOS)
sysopen De traditionele "0", "1" en "2" MODE's zijn geïmplementeerd met verschillende numerieke waarden
waarden op sommige systemen. De vlaggen geëxporteerd door "Fcntl" (O_RDONLY, O_WRONLY,
O_RDWR) zou echter overal moeten werken. (Mac OS, OS/390)
systeem Als optimalisatie mag de opdrachtshell die is opgegeven in $ENV{PERL5SHELL} niet worden aangeroepen.
"system(1, @args)" brengt een extern proces voort en retourneert onmiddellijk het proces ervan
aanduiding, zonder te wachten tot deze wordt beëindigd. Retourwaarde mag worden gebruikt
vervolgens in "wait" of "waitpid". Het niet "spawn()" van een subproces is dat wel
aangegeven door het instellen van $? naar "255 << 8". $? is ingesteld op een manier die compatibel is met Unix
(dwz de exitstatus van het subproces wordt verkregen door ""$? " 8">>, zoals beschreven in
de documentatie). (Win32)
Er is geen shell om metatekens te verwerken, en de standaard is het doorgeven van a
opdrachtregel afgesloten met "\n" "\r" of "\0" naar het voortgebrachte programma. Omleiding
zoals "> foo" wordt uitgevoerd (of helemaal niet) door de runtimebibliotheek van het voortgebrachte bestand
programma. "systeem" lijst zal de "exec"-emulatie van de Unix-emulatiebibliotheek aanroepen,
die probeert emulatie te bieden van de stdin, stdout, stderr die van kracht is in de
ouder, op voorwaarde dat het onderliggende programma een compatibele versie van de emulatie gebruikt
bibliotheek. scalair zal de native opdrachtregel direct aanroepen en een dergelijke emulatie niet
er zal een onderliggend Unix-programma bestaan. Kilometerstand wil variëren. (RISC-besturingssysteem)
"systeem LIJST" zonder het gebruik van de syntaxis van indirecte objecten ("systeem PROGRAMMA LIJST")
kan terugvallen op het proberen van de shell als de eerste "spawn()" mislukt. (Win32)
Spoelt uitvoerhendels op sommige platforms niet automatisch door. (SunOS, Solaris,
HP-UX)
De retourwaarde is POSIX-achtig (met 8 bits omhoog verschoven), waardoor er alleen ruimte is voor
een samengestelde waarde afgeleid van de ernstbits van de oorspronkelijke 32-bits conditiecode
(tenzij overschreven door "use vmsish 'status'"). Als de oorspronkelijke voorwaardecode één is
waarvoor een POSIX-waarde is gecodeerd, wordt de POSIX-waarde gedecodeerd om de
verwachte exitwaarde. Voor meer details zie "$?" in perlvms. (VMS)
telldir Niet geïmplementeerd. (Androïde)
tijden "cumulatieve" tijden zullen nep zijn. Op iets anders dan Windows NT of Windows
In 2000 zal de "systeem"-tijd nep zijn, en de "gebruikers"-tijd is feitelijk de teruggegeven tijd
door de functie "clock()" in de C runtime-bibliotheek. (Win32)
Niet bruikbaar. (RISC-besturingssysteem)
afkappen
Niet geïmplementeerd. (Oudere versies van VMS)
Alleen inkorten tot dezelfde of kortere lengtes. (VOS)
Als er een FILEHANDLE wordt geleverd, moet deze beschrijfbaar zijn en geopend worden in de append-modus (dwz
gebruik "open(FH, '>>bestandsnaam')" of "sysopen(FH,...,O_APPEND|O_RDWR)". Als een bestandsnaam
wordt meegeleverd, mag deze niet elders open worden gehouden. (Win32)
umask Retourneert undef indien niet beschikbaar.
"umask" werkt, maar de juiste rechten worden pas ingesteld als het bestand definitief is
gesloten. (AmigaOS)
utime Alleen de wijzigingstijd wordt bijgewerkt. (VMS, RISC-besturingssysteem)
Gedraagt zich mogelijk niet zoals verwacht. Gedrag is afhankelijk van de C-runtimebibliotheek
implementatie van "utime()", en het bestandssysteem dat wordt gebruikt. Het FAT-bestandssysteem
ondersteunt doorgaans geen veld 'toegangstijd' en kan de tijdstempels beperken tot
een granulariteit van twee seconden. (Win32)
wachten
waitpid Kan alleen worden toegepast op proceshandles die worden geretourneerd voor processen die zijn voortgebracht met behulp van
"system(1, ...)" of pseudo-processen gemaakt met "fork()". (Win32)
Niet bruikbaar. (RISC-besturingssysteem)
ondersteunde platforms
Het is bekend dat de volgende platforms Perl 5.12 bouwen (vanaf april 2010, de releasedatum)
uit de standaard broncodedistributie die beschikbaar is ophttp://www.cpan.org/src>
Linux (x86, ARM, IA64)
HP-UX
AIX
Win32
Windows 2000
Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
Windows 7
Cygwin
Van sommige tests is bekend dat ze mislukken:
· ext/XS-APItes/t/call_checker.t - zie
· dist/I18N-Collate/t/I18N-Collate.t
· ext/Win32CORE/t/win32core.t - kan mislukken bij recente cygwin-installaties.
Solaris (x86, SPARC)
Open VMS
Alfa (7.2 en hoger)
I64 (8.2 en hoger)
Symbian
NetBSD
FreeBSD
Debian GNU / kFreeBSD
Haiku
Irix (6.5. Wat nog meer?)
OpenBSD
Libelle BSD
Middernacht BSD
QNX Neutrino RTOS (6.5.0)
MirOS-BSD
Stratus OpenVOS (17.0 of hoger)
Voorbehoud:
time_t-problemen die wel of niet kunnen worden opgelost
Symbian (Series 60 v3, 3.2 en 5 - wat nog meer?)
Stratus VOS / OpenVOS
AIX
Android
Gratis MUNT
Perl bouwt nu met FreeMiNT/Atari. Het faalt een paar tests, dat heeft wat nodig
onderzoek.
De FreeMiNT-poort gebruikt GNU dld voor laadbare modulemogelijkheden. Zorg er dus voor dat je dat hebt
die bibliotheek die werd geïnstalleerd bij het bouwen van perl.
EOL platforms
(Perl 5.20)
De volgende platforms werden ondersteund door een eerdere versie van Perl, maar zijn dat wel geweest
officieel verwijderd uit de broncode van Perl vanaf 5.20:
AT&T 3b1
(Perl 5.14)
De volgende platforms werden ondersteund tot 5.10. Mogelijk hebben ze in 5.12 nog gewerkt,
maar ondersteunende code is verwijderd voor 5.14:
Windows 95
Windows 98
Windows ME
Windows NT4
(Perl 5.12)
De volgende platforms werden ondersteund door een eerdere versie van Perl, maar zijn dat wel geweest
officieel verwijderd uit de broncode van Perl vanaf 5.12:
Atari MINT
Apollo-domein/OS
Appel MacOS 8/9
Ten Machten
ondersteunde platforms (Perl 5.8)
Vanaf juli 2002 (de Perl-release 5.8.0) konden de volgende platforms Perl bouwen
uit de standaard broncodedistributie die beschikbaar is ophttp://www.cpan.org/src/>
AIX
BeOS
BSD/OS (BSDi)
Cygwin
DG/UX
DOS DJGPP 1)
DYNIX/ptx
EPOC R5
FreeBSD
HI-UXMPP (Hitachi) (5.8.0 werkte, maar we wisten het niet)
HP-UX
IRIX
Linux
Mac OS Classic
Mac OS X (Darwin)
MPE / iX
NetBSD
NetWare
NonStop-UX
ReliantUNIX (voorheen SINIX)
OpenBSD
OpenVMS (voorheen VMS)
Open UNIX (Unixware) (sinds Perl 5.8.1/5.9.0)
OS / 2
OS/400 (met behulp van de PASE) (sinds Perl 5.8.1/5.9.0)
PowerUX
POSIX-BC (voorheen BS2000)
QNX
solaris
Sun OS 4
SUPER-UX (NEC)
Tru64 UNIX (voorheen DEC OSF/1, Digital UNIX)
Unicos
UNICOS/mk
UTS
VOS / OpenVOS
Win95/98/ME/2K/XP 2)
WinCE
z/OS (voorheen OS/390)
VM/ESA
1) in de DOS-modus kunnen de DOS- of OS/2-poorten worden gebruikt
2) samenstellers: Borland, MinGW (GCC), VC6
De volgende platforms werkten met de vorige releases (5.6 en 5.7), maar wij niet
erin slagen deze op tijd te repareren of te testen voor de release van 5.8.0. Er is een zeer goede
De kans is groot dat veel hiervan prima zullen werken met 5.8.0.
BSD / OS
DomeinOS
Hurd
lynxOS
MachTen
VermogenMAX
SCO SV
SVR4
Unixware
Windows 3.1
Bekend dat deze defect is voor 5.8.0 (maar 5.6.1 en 5.7.2 kunnen worden gebruikt):
AmigaOS
Van de volgende platforms is bekend dat ze in het verleden Perl vanuit de broncode hebben gebouwd (5.005_03
en eerder), maar we hebben de status ervan voor de huidige release niet kunnen verifiëren,
hetzij omdat de hardware-/softwareplatforms zeldzaam zijn, hetzij omdat we geen actief hebben
kampioen op deze platforms - of beide. Vroeger werkten ze wel, dus ga je gang en probeer het
ze samenstellen, en laten [e-mail beveiligd] van eventuele problemen.
3b1
A / UX
Convex OS
CX/UX
gelijkstroom/OSx
DDE MKB
DOS-EMX
Dynix
EP/IX
ESIX
FPS
GENIX
Groene heuvels
ISC
MachTen 68k
MPC
NIEUWS-OS
Volgende stap
OpenSTEP
Opus
9 plattegrond
RISC/os
SCO ODT/OSR
Stellar
SVR2
TI1500
TitanOS
Ultrix
Unisys Dynix
De volgende platforms hebben hun eigen broncodedistributies en binaire bestanden beschikbaar
viahttp://www.cpan.org/ports/>
Perl-uitgave
OS/400 (ILE) 5.005_02
Tandembeschermer 5.004
Op de volgende platforms zijn alleen binaire bestanden beschikbaar via
<http://www.cpan.org/ports/index.html>:
Perl-uitgave
Eikel RISCOS 5.005_02
AOS 5.002
Lynx OS 5.004_02
Hoewel we raden aan dat u altijd uw eigen Perl bouwt vanuit de broncode, zowel voor
maximale configureerbaarheid en voor de veiligheid, als u haast heeft, kunt u dit controleren
<http://www.cpan.org/ports/index.html> voor binaire distributies.
Gebruik perlport online met behulp van onworks.net-services
