En af de mest irriterende begrænsninger i PL/I er, at en tegnstreng kun kan være op til 32767 bytes lang. Det er jo ingenting i disse moderne tider, hvor stort set alle processorer og operativsystemer adresserer med 64 bits. Indtil videre gider IBM åbenbart ikke gøre noget ved denne begrænsning, så her kommer et tip om, hvordan du omgår denne begrænsning.
Jeg vil gerne lave en CHAR(100000) variabel i mit program. Det kan jeg jo desværre ikke, så i stedet kan jeg erklære den som et array med 100000 elementer, hvor hvert enkelt element er en CHAR(1). Ulempen er selvfølgelig, at jeg så ikke umiddelbart har adgang til funktioner som for eksempel SUBSTR, der arbejder på en almindelig CHAR-variabel. Men det problem har PL/I folkene for længst løst med STRING funktionen. Her kommer et eksempel:
Det først assignment statement fungerer præcis som hvis myBigChar var erklæret som en CHAR(100) eller lignende. Alle de efterfølgende bytes bliver med andre ord sat til blanke. Det andet assignment udnytter, at myBigChar faktisk er et array og sætter pos. 60000 til en asteriks. Med den efterfølgende index finder vi asteriksens position. Her vil du med stor sandsynlighed få et andet resultat end det forventede 60000 for at få det rigtige resultat, da du skal kompilere programmet med compiler option BIFPREC(31). Brug PROCESS til dette. Den sidste PUT SKIP LIST vil udskrive teksten small.
Som du kan se er tricket at benytte string(myBigChar) de steder, hvor du normalt bare ville skrive myBigChar. Desværre virker tricket ikke hvis du forsøger at benytte substr som pseudovariable. Concateneringer ud over de første 32767 tegn virker heller ikke, så der er stadig plads til forbedringer.