VMS :: DCLsymモジュールは長年にわたりPerlコア配布の一部であり、関数(または他の何か)の戻り値をDCLシンボルに簡単に格納できます。ここでは例です:
$ perl -"MVMS::DCLsym" -e "$x = sprintf('0x%x', 99); VMS::DCLsym->setsym('X', $x, 'GLOBAL');"
$ show symbol x
X == "0x63"
はまた、デフォルトでは、%ENVハッシュはPerlが出た後、彼らは存続を意味し、スーパバイザ・モードのプロセス論理名にマッピングされています。そこでここではPerlが終了したときにCLIのための後ろに何かを残すための別の方法です:
$ perl -e "$ENV{'X'} = sprintf('0x%x', 99);"
$ show logical x
"X" = "0x63" (LNM$PROCESS_TABLE)
$ x = f$trnlnm("X")
$ show symbol x
X = "0x63"
あなたが戻っDCLに渡したい唯一のことは、整数値である場合は、あなただけのその値でPerlを終了してからそれを取り出すことができますDCLで常に利用可能である$のステータスシンボル:
$ perl -e "exit 99;"
$ show symbol $status
$STATUS == "%X00000063"
しかし、CLIは、いずれかを呼び出す後者の場合には、成功(奇数値)または失敗(偶数値)として、その値を解釈しますので、合併症が、ここにありますあなたが設定した関連する警告ハンドラまたはエラーハンドラとメッセージテキストを取得しようとしています。言い換えれば、終了ステータスは、この有名なイースターエッグのように、実際にDCLに何かを意味することが期待されています
$ perl -e "exit 2928;"
%SYSTEM-W-FISH, my hovercraft is full of eels
あなたは「『静か』 vmsish」プラグマ、しばらくして、メッセージの印刷を抑制することができますあなたは、あなたがそうであるかもしれない数字の範囲内にあると仮定して、 "vmsish 'exit'"プラグマを使って0を一般的な成功値にマッピングし、1を一般的な失敗値にマッピングしないようにします戻る。したがって、次のようになります。
偶数番号の出口値の場合でもハンドラーが呼び出されることがあります。
ちょうどこれに気づいたhttp://stackoverflow.com/questions/4431757/how-to-assign-the-output-of-a-program-to-a-variable-in-a-dcl-com-script- on-vmsは、私の最初の選択肢でどのように動作するかの良い例を持っています。 – ChrisB