Um... PL/M is not safe, and does not have "safe strings and arrays".
It doesn't have strings... It has bytes and addresses.
I hope /s means "sarcastic".
I hope /s means "sarcastic".
It has subscripted variables with LENGTH() to check its size (aka arrays), and an array of bytes is a string.
You can even create structures of subscripted variables.
PL/M manuals have a couple of examples with string utility functions by the way.