引用时,$!
检索 C errno
整数变量的当前值。如果 $!
被赋值为一个数字,则该值将存储在 errno
中。引用为字符串时,$!
会生成与 errno
相对应的系统错误字符串。
许多系统或库调用在失败时会设置 errno
,以指示失败的原因。如果成功,它们通常不会将 errno
设置为零,并且可能会在成功时将 errno
设置为非零值。这意味着 errno
(因此 $!
)仅在失败后立即才有意义
if (open my $fh, "<", $filename) {
# Here $! is meaningless.
...
}
else {
# ONLY here is $! meaningful.
...
# Already here $! might be meaningless.
}
# Since here we might have either success or failure,
# $! is meaningless.
此处,无意义意味着 $!
可能与 open()
运算符的结果无关。对 $!
的赋值也同样短暂。它可以在调用 die()
运算符之前立即使用,以设置退出值,或检查与错误n 对应的系统错误字符串,或将 $!
恢复到有意义的状态。
即使未执行系统调用,Perl 本身也可能在失败时将 errno
设置为非零。
助记符:刚才发生了什么?