我是新来的。在阅读了如何提问和格式化之后,我希望这是一个可以的问题。我对 perl 不是很熟练,但它是我最了解的编程语言。
我尝试将 Perl 应用到现实生活中,但我没有得到很好的理解——尤其是从我的妻子那里。我告诉她:
如果她晚上没有给我带来3杯啤酒,那意味着我得到了零(或没有)啤酒。
正如您可能猜到的那样,没有太大的成功。:(
现在事实上。从perlop:
一元“!” 执行逻辑否定,即“非”。
语言,什么有boolean
类型(什么只能有两个“值”)是可以的:
如果它不是一个值 ->必须是另一个值。
很自然:
!true -> false
!false -> true
但是 perl 没有boolean
变量 - 只有一个truth system
, whrere everything is not 0
, '0'
undef
,''
是 TRUE。当对非逻辑值(例如数字)应用逻辑否定时,问题就来了。
例如,如果某个数字不是 3,那意味着它是零或空,而不是现实生活中的意义,如果某物不是 3,则意味着它可以是除 3 之外的任何东西(例如,也为零)。
所以接下来的代码:
use 5.014;
use Strictures;
my $not_3beers = !3;
say defined($not_3beers) ? "defined, value>$not_3beers<" : "undefined";
say $not_3beers ? "TRUE" : "FALSE";
my $not_4beers = !4;
printf qq{What is not 3 nor 4 mean: They're same value: %d!\n}, $not_3beers if( $not_3beers == $not_4beers );
say qq(What is not 3 nor 4 mean: @{[ $not_3beers ? "some bears" : "no bears" ]}!) if( $not_3beers eq $not_4beers );
say ' $not_3beers>', $not_3beers, "<";
say '-$not_3beers>', -$not_3beers, "<";
say '+$not_3beers>', -$not_3beers, "<";
印刷:
defined, value><
FALSE
What is not 3 nor 4 mean: They're same value: 0!
What is not 3 nor 4 mean: no bears!
$not_3beers><
-$not_3beers>0<
+$not_3beers>0<
而且:
perl -E 'say !!4'
什么不是 4 IS 1,而不是 4!
上面对妻子的陈述是“错误的”(意思是 0):),但真的试图教我儿子Perl,过了一会儿,他问我妻子:为什么,如果某物不是 3 意味着它是 0 ?.
所以问题是:
- 如何向我儿子解释这个
- 为什么 perl 有这个设计,那么为什么
!0
每次都是 1 - 这里有什么“背后”需要
!0
的不是任何随机数,而是 0。 - 正如我已经说过的,我不太了解其他语言-每种语言都是
!3 == 0
?