Program w języku PL/M składa się z niezależnie kompilowanych modułów. Moduł źródłowy (najmniejsza kompilowalna jednostka) jest instrukcją strukturalną o postaci: nazwa: DO; deklaracje i definicje [instrukcje] END nazwa; Jeżeli moduł zawiera co najmniej jedną instrukcję, to stanowi moduł główny i od niego rozpoczyna się wykonywanie programu; przy kilku takich modułach wyróżnienie modułu głównego następuje na etapie konsolidacji. Pozostałe moduły mogą zawierać jedynie deklaracje i definicje.
W języku PL/M zmienne posiadają określane w deklaracjach atrybuty: zmienne proste: BYTE – bajtowe, ADDRESS – dwubajtowe, zmienne te mogą oprócz liczb całkowitych przechowywać dane wskaźnikowe (należy raczej powiedzieć, że dane całkowite przechowywane w tych zmiennych mogą być traktowane jako wskaźniki), BASE – bazowe; tablicowe – tablice mogą być w PL/M jednowymiarowe o ustalonym wymiarze indeksowane od zera, strukturowe, literały – LITERALLY 'tekst'.
Późniejsze wersje języka, jak PL/M 386 dla systemu iRMX, wprowadziły nowe typy, znane z innych języków programowania, takie jak całkowity, rzeczywisty, znakowy, umożliwiające programowanie na wyższym poziomie abstrakcji, choć oczywiście nadal jest możliwe programowanie bliskie sprzętowi, w tym korzystanie z ww.