内容

名称

vmsish - Perl 语言特性控制 VMS 特定语言特性的 pragma

概要

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 本身的任何消息,只是 DCL 在 Perl 退出后生成的那些消息。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 模块".