Wat is het PM-bestandsformaat?
Een .pm-bestand is een Perl-module - een bronbestand in platte tekst dat herbruikbare Perl-code verpakt in een benoemde namespace. Het modulesysteem werd geïntroduceerd met Perl 5 in 1994 en vormt nog steeds de basis van het CPAN-ecosysteem, dat honderdduizenden .pm-modules host.
Elk .pm-bestand declareert zijn namespace bovenaan met een package-statement (bijv. package HTTP::Tiny;) en eindigt conventioneel met een losse 1; zodat use of require een succesvolle lade-actie kan verifiëren. Er is geen binair magisch getal; het bestand wordt geïdentificeerd door de extensie .pm en de aanwezigheid van een package-declaratie.
Modulenaam en bestandspad zijn direct gekoppeld: Foo::Bar verwijst naar Foo/Bar.pm ergens in het @INC-zoekpad van Perl. Een module wordt geladen door een .pl-script of een andere module met use Module::Name; of require "Module/Name.pm".
Typische inhoud bevat:
- Geëxporteerde subroutines en variabelen (meestal beheerd met
Exporter) - Objectgeoriënteerde klassedefinities
- Ingebedde
.pod-documentatieblokken - Een versiedeclaratie via
our $VERSION = '1.00';
Modules worden tijdens runtime geïnterpreteerd; .pmc-bestanden zijn een optionele byte-code cache. Het MIME-type is text/x-perl en de codering is meestal UTF-8 of ASCII, indien nodig gedeclareerd met use utf8;.
Beveiliging & veiligheid
RISICO: MEDIUMEen .pm-bestand is platte tekst en veilig om te lezen of te openen in een editor - het kan niets uit zichzelf doen. Het risico zit in het UITVOEREN ervan: Perl-modules zijn uitvoerbare code die bestanden kunnen lezen/schrijven, shell-commando's kunnen uitvoeren en netwerkverbindingen kunnen maken. Code kan zelfs tijdens het laden worden uitgevoerd (BEGIN-blokken, import-logica) op het moment dat een script «use Module;» aanroept. Behandel een niet-vertrouwde .pm dus als elk ander programma: lees het voordat je het laadt, en voer geen Perl-code uit van bronnen die je niet vertrouwt. Het bestand op de schijf is onschadelijk.
Formaatdetails
in een notendop- Adobe PageMaker publicatie (.pm) - Oudere Aldus/Adobe PageMaker desktop-publishing documenten gebruikten de .pm extensie (later .pm5/.pm6/.p65/.pmd); openen/converteren in Adobe InDesign.
Programma's die PM-bestanden openen
Technische details
diepe specificaties| MIME-type | text/x-perl (ook geaccepteerd: application/x-perl, text/plain) |
| Codering | UTF-8 of ASCII; niet-ASCII broncode vereist een expliciete `use utf8;` declaratie |
| Bestandsstructuur | `package` declaratie → imports (`use`/`require`) → subroutines en variabelen → optionele `Exporter` configuratie → ingebedde POD-documentatie → afsluitende waarheidswaarde (`1;`) |
| Magische bytes / handtekening | Geen; geen binaire handtekening. Geïdentificeerd door de `.pm`-extensie en een `package`-statement bovenaan. Een optionele UTF-8 BOM (EF BB BF) kan voorafgaan aan de eerste regel. |
| Namespace-naar-pad mapping | Modulenaam verwijst direct naar het bestandspad: `Foo::Bar` wordt `Foo/Bar.pm` in het `@INC`-zoekpad van Perl |
| Laadmechanisme | Laden tijdens compile-tijd via `use Module;`; laden tijdens runtime via `require 'Module/Name.pm'` of `require Module::Name` |
| Afsluiting met waarheidswaarde | Moet eindigen met een waarheidswaarde - conventioneel een losse `1;` - zodat de aanroeper kan bevestigen dat het bestand zonder fouten is geladen |
| Versietargeting | Minimale Perl-versie gedeclareerd met `use v5.xx;` of `use 5.010;`; heeft geen eigen bestandsformaatversie |
| Typische bestandsgrootte | 1 KB - 200 KB per module |
| Exportmechanisme | Subroutines en variabelen worden selectief blootgesteld aan aanroepers via de `Exporter`-module met behulp van `@EXPORT` en `@EXPORT_OK` arrays |
| Documentatie-inbedding | Inline Plain Old Documentation (POD) blokken, afgebakend door `=pod` / `=cut`; verwerkt door `perldoc` en POD-renderers |
| Byte-code cache | Perl kan een voorgecompileerde vorm opslaan naast de broncode als een `.pmc`-bestand; de `.pm` zelf wordt nooit gecompileerd naar een zelfstandig binair bestand |
| Obfuscatie / versleuteling | Standaard platte tekst; optionele broncodefiltering via modules zoals `Filter::Crypto` of `Filter::Util::Call` |
| Bijbehorende platforms | Linux, macOS, Windows (Strawberry Perl / ActivePerl), en elk ander besturingssysteem waar Perl is geïnstalleerd |
| Uitgebracht | 1987 (Perl 1.0); the .pm module convention dates to Perl 5 (1994) |
| Laatste versie | Perl 5.40 (2024); Perl modules remain the standard library packaging unit |
| Open standaard | Ja · royaltyvrij |
| Specificatie | perldoc.perl.org |
PM conversies
Community V&A
gevraagd door gebruikersNog geen vragen - wees de eerste om iets te vragen over PM-bestanden.