ソース・ストリングは、ターゲット・ストリングの左から右へ割り当てられます。 ソース・ストリングがターゲット・ストリングよりも長いときは、右側の入りきらなかった文字 、ビット、グラフィック、またはワイド文字は無視され、STRINGSIZE 条件が起こります。 ターゲット・ストリングが固定長で、ソース・ストリングよりも長いときは、ターゲット・ストリングの右側が埋め込まれます。 STRINGSIZE が割り込み禁止になっており、 ソース・ストリングやターゲット・ストリング (またはこれらの両方) の長さが 実行時に判別され、しかもターゲット・ストリングが短すぎてソース・ストリングが入りきらない場合には、 予測できない結果が発生することがあります。
ストリングにはブランクが埋め込まれ、ビット・ストリングには '0'B、 漢字ストリングには DBCS ブランク、ワイド文字ストリングには ワイド文字ブランクがそれぞれ埋め込まれます。
declare Subject char(10); Subject = 'Transformations';
'Transformations' は、15 文字です。したがって、 PL/I がそのストリングを Subject に割り当てると、 ストリングの右端から 5 文字を切り捨てます。 これは次の割り当てを実行するのと同等です。
Subject = 'Transforma';
下に示す最初の 2 つのステートメントは、 同じ値を Subject に割り当てます。 また、最後の 2 つのステートメントは、 同じ値を Code に割り当てます。
Subject = 'Physics'; Subject = 'Physics '; declare Code bit(10); Code = '110011'B; Code = '1100110000'B;
次の 2 つのステートメントは、Subject に 同等の値を割り当てません。
Subject = '110011'B; Subject = '1100110000'B;
最初のステートメントが実行されると、右側のビット定数がまず文字ストリングに 変換されてから、ビットのゼロではなくブランク文字が右側に埋め込まれます。 このステートメントは次のステートメントと同等です。
Subject = '110011bbbb';
この 2 つのステートメントの 2 番目のステートメントでは、 ビットから文字タイプへの変換が必要です。 これは次のステートメントと同等です。
Subject = '1100110000';
ストリング値が、VARYING 属性を持つストリング変数に割り当てられるときは、ブランク文字またはゼロのビットによる埋め込みは行われません。 代わりに、ターゲット・ストリング変数の長さが、割り当てられたストリングの長さにセットされます。 ただし、割り当てられたストリングが、可変長ストリング変数で宣言されている 最大の長さより長いときは、切り捨てが行われます。