RPG

255. 人はなぜ「値」で悩むのか ?

RPG の出力仕様書の内部記述で「値」という文字を記述したり
読取った入力データの中に「値」という文字が含まれていたときに
RPG が不明なコンパイル・エラーを起こしたり
実行時に誤動作を起こしたことはないだろうか ?

これは「値」という文字が処理中に含まれているときに発生する誤動作である。
あなたの会社に RPG III を知っているよき古き経験豊かな先輩が
おられたとすると、「ああ、これは透過リテラルを指定すると直るんだよ!」
なんて聞いて H-仕様書の透過リテラルという意味不明な項目に 1 を指定して
再コンパイルするとアラ、不思議?! たちまちエラーはなくなって
コンパイルも正常に通りました! さすが先輩はエライ!!
先輩も「エッヘン、何かわからないことがあれば何でもボクに聞きたまえ。」なんてことになるのだが、
それなら「先輩、どうして『値』という文字だけがダメなんですか?」と聞いてはいけない。
先輩のプライドを傷つけることになりかねないからだ。

さて、それでは『値』という漢字がなぜ問題なのだろうか?
『値』は X'487D' である。
これに対して 『 ' 』 (引用符) も X'7D' である。
ご想像のとおり『値』の X'7D' の部分が
引用符の X'7D' とシステムが勘違いしているからに他ならない。

透過リテラルの指定は、この部分の検査を厳格にするだけの話である。
これは RPG だけでなく COBOL, CMD, CLP にでも発生するので注意が必要である。

さて RPG III のときの透過リテラルと紹介したのには理由がある。
H-仕様書の透過リテラルを CVTRPGSRC で ILE-RPG に変換したとしても
透過リテラルに相当する記述はない。
つまり ILE-RPG には透過リテラルの指定は存在しない。
それではILE-RPGでは『値』の問題をどのようにして回避するのかというと
X'487D' というように HEX表示するしかない、と IBMマニュアルには書かれている。 

『値』の問題で不可思議なエラーに悩まされないため
あえてこの問題を紹介したような次第である。