vmsish - Perl pragma 用於控制 VMS 特定的語言功能
use vmsish;
use vmsish 'status'; # or '$?'
use vmsish 'exit';
use vmsish 'time';
use vmsish 'hushed';
no vmsish 'hushed';
vmsish::hushed($hush);
use vmsish;
no vmsish 'time';
如果沒有提供匯入清單,則假設所有可能的 VMS 特定功能。目前,有四個可用的 VMS 特定功能:'status'(又稱 '$?')、'exit'、'time' 和 'hushed'。
如果您沒有執行 VMS,此模組不會執行任何操作。
vmsish status
這會讓 $?
和 system
傳回原生 VMS 退出狀態,而不是模擬 POSIX 退出狀態。
vmsish exit
這會讓 exit 1
產生成功的退出(狀態 SS$_NORMAL),而不是模擬 UNIX exit(),後者將 exit 1
視為表示錯誤。與 CRTL 的 exit() 函數一樣,exit 0
也會對應到 SS$_NORMAL 的退出狀態,而 exit() 的任何其他參數都會直接用作 Perl 的退出狀態。
vmsish time
這會讓所有時間都相對於當地時區,而不是預設的通用時間(又稱格林威治標準時間或 GMT)。
vmsish hushed
如果 Perl 以錯誤狀態終止,這會禁止將 VMS 狀態訊息印出至 SYS$OUTPUT 和 SYS$ERROR,並允許預期「類 Unix」Perl 的程式避免解析 VMS 錯誤訊息。它不會禁止 Perl 本身的任何訊息,只禁止 Perl 退出後由 DCL 產生的訊息。DCL 符號 $STATUS 仍會有終止狀態,但會設定高位元
範例:$ perl -e"exit 44;" 未靜音的錯誤退出 %SYSTEM-F-ABORT,中斷 DCL 訊息 $ show sym $STATUS $STATUS == "%X0000002C"
$ perl -e"use vmsish qw(hushed); exit 44;" Hushed error exit
$ show sym $STATUS
$STATUS == "%X1000002C"
在編譯期間,「靜音」旗標具有全域範圍:在「vmsish hushed」之後編譯的 exit() 或 die() 指令會在執行時靜音。執行「no vmsish 'hushed'」會關閉靜音旗標。
靜音旗標的狀態也會影響編譯錯誤產生的 VMS 錯誤訊息輸出。同樣地,您仍會收到 Perl 錯誤訊息(以及 $STATUS 中的程式碼)
範例:use vmsish 'hushed'; # 開啟靜音旗標 use Carp; # Carp 編譯靜音 exit 44; # 會靜音 croak('I die'); # 會靜音 no vmsish 'hushed'; # 關閉靜音旗標 exit 44; # 不會靜音 croak('I die2'): # 會靜音,croak 已編譯靜音
您也可以在執行時使用內建常式 vmsish::hushed() 來控制「靜音」旗標。未傳遞引數時,它會傳回靜音狀態。由於 vmsish::hushed 是內建的,因此您不需要「use vmsish」就能呼叫它。
範例:if ($quiet_exit) { vmsish::hushed(1); } print "Sssshhhh...I'm hushed...\n" if vmsish::hushed(); exit 44;
請注意,由於「use vmsish」而編譯為「靜音」的 exit() 或 die(),無法在執行時呼叫 vmsish::hushed(0) 來取消靜音。
Perl 核心內部錯誤退出的訊息通常較為嚴重,不會禁止。
請參閱 perlmod 中的「Perl 模組」。