Suffixes that follow string constants are not replaced by the macro preprocessor—whether or not these are legal PL/I suffixes—unless you insert a delimiter between the ending quotation mark of the string and the first letter of the suffix.
Note that the OS PL/I V2R1 compiler introduced this change, and so this is not a difference between the Enterprise PL/I compiler and either the PL/I for MVS & VM compiler or the OS PL/I V2Rx compilers. This restriction is consequently not flagged.
As an example, consider:
%DCL (GX, XX) CHAR;
%GX='||FX';
%XX='||ZZ';
DATA = 'STRING'GX;
DATA = 'STRING'XX;
DATA = 'STRING' GX;
DATA = 'STRING' XX;
Under OS PL/I V1, this produces the source:
DATA = 'STRING'||FX;
DATA = 'STRING'||ZZ;
DATA = 'STRING' ||FX;
DATA = 'STRING' ||ZZ;whereas, under Enterprise PL/I it produces:
DATA = 'STRING'GX;
DATA = 'STRING'XX;
DATA = 'STRING' ||FX;
DATA = 'STRING' ||ZZ;