“!$@”在 Perl 中是什么意思?
What does "!$@" mean in Perl?
我不懂 Perl。我正在尝试阅读一些我没有写的 Perl 代码,我已经在这一行卡住了一两天:
use constant RUNTIME => eval "use Time::SoFar qw( runinterval )" || !$@;
我拼凑了大部分,但我想不通最后一点,!$@
。
我读过的任何教程中均未包含此内容,而且我不清楚应该查找文档的哪一页,因为我不知道与此内容相关的任何关键字。
网络搜索随机符号没有结果,因为大多数搜索引擎都会忽略它们(显然包括 Stack Overflow 的搜索引擎)。
我也无法将其分解为更简单的组件。我将 $
和 @
识别为标量和数组变量的标记,但显然这不是它们在这里的使用方式。单独搜索它们只会给出这些变量印记的结果。
那我需要专家。 !$@
在这种情况下是什么意思?
!
是否定运算符 (perlop), $@
is the special variable that holds the last exception thrown (perlvar#$@)。
如果 use
子句执行成功,常量 RUNTIME
将设置为 1
。否则,它将被设置为空字符串。
$@
是一个变量。是 documented in perlvar。它包含最近 eval
或 undef
(如果有 none)抛出的异常。 !
只是非运算符。
这有点像卡通对话的咒语是不是?
一次取一个符号。 !
是布尔值 NOT,所以如果后面的值为 True 它将变为 False,反之亦然。
$
开始一个标量值。 $@
在man perlvar
中找到,是上次eval
调用输出的错误值。
虽然它看起来很像被审查的脏话,但它实际上分解为 !
和 $@
。
Perl 有许多具有单字符名称的“特殊变量”;他们还使用指令 use English;
启用了更长的名称
你可以在the perlvar page of the perl manual上找到一个列表(应该也可以通过运行perldoc perlvar
找到),其中指定$@
,英文名$EVAL_ERROR
,如:
The Perl error from the last eval operator, i.e. the last exception that was caught. For eval BLOCK, this is either a runtime error message or the string or reference die was called with. The eval STRING form also catches syntax errors and other compile time exceptions.
If no error occurs, eval sets $@ to the empty string.
然后将其传递给 !
,这是“非”运算符,它将 $@
中的字符串视为布尔值。
- 如果错误字符串为空,则为false,“not false”为true,将变为“1”
- 如果错误字符串不为空,则为真,“不为真”为假,则变为“”
我不懂 Perl。我正在尝试阅读一些我没有写的 Perl 代码,我已经在这一行卡住了一两天:
use constant RUNTIME => eval "use Time::SoFar qw( runinterval )" || !$@;
我拼凑了大部分,但我想不通最后一点,!$@
。
我读过的任何教程中均未包含此内容,而且我不清楚应该查找文档的哪一页,因为我不知道与此内容相关的任何关键字。
网络搜索随机符号没有结果,因为大多数搜索引擎都会忽略它们(显然包括 Stack Overflow 的搜索引擎)。
我也无法将其分解为更简单的组件。我将 $
和 @
识别为标量和数组变量的标记,但显然这不是它们在这里的使用方式。单独搜索它们只会给出这些变量印记的结果。
那我需要专家。 !$@
在这种情况下是什么意思?
!
是否定运算符 (perlop), $@
is the special variable that holds the last exception thrown (perlvar#$@)。
如果 use
子句执行成功,常量 RUNTIME
将设置为 1
。否则,它将被设置为空字符串。
$@
是一个变量。是 documented in perlvar。它包含最近 eval
或 undef
(如果有 none)抛出的异常。 !
只是非运算符。
这有点像卡通对话的咒语是不是?
一次取一个符号。 !
是布尔值 NOT,所以如果后面的值为 True 它将变为 False,反之亦然。
$
开始一个标量值。 $@
在man perlvar
中找到,是上次eval
调用输出的错误值。
虽然它看起来很像被审查的脏话,但它实际上分解为 !
和 $@
。
Perl 有许多具有单字符名称的“特殊变量”;他们还使用指令 use English;
你可以在the perlvar page of the perl manual上找到一个列表(应该也可以通过运行perldoc perlvar
找到),其中指定$@
,英文名$EVAL_ERROR
,如:
The Perl error from the last eval operator, i.e. the last exception that was caught. For eval BLOCK, this is either a runtime error message or the string or reference die was called with. The eval STRING form also catches syntax errors and other compile time exceptions.
If no error occurs, eval sets $@ to the empty string.
然后将其传递给 !
,这是“非”运算符,它将 $@
中的字符串视为布尔值。
- 如果错误字符串为空,则为false,“not false”为true,将变为“1”
- 如果错误字符串不为空,则为真,“不为真”为假,则变为“”