相关疑难解决方法(0)

为什么Perl使用空字符串来表示布尔值false?

在标量(布尔)上下文中1计算表达式时,如果表达式求值为true ,则Perl使用显式值作为结果;如果表达式求值为false,则使用空字符串.我很好奇为什么Perl使用空字符串来表示布尔值false而不是0更直观.

请注意,我并不关心Perl将空字符串视为标量(布尔)上下文中的false.

编辑

如何使用true("false"例如)字符串作为false值的字符串表示来改变现有代码的含义?我们可以说在这样的改变之后改变语义的代码不像它本来那样健壮/正确吗?我猜字符串上下文在Perl中是如此普遍,以至于导致理智语义的唯一选择是,如果布尔值在向字符串转换为字符串之后保留其值...

perl boolean boolean-expression

18
推荐指数
2
解决办法
3095
查看次数

双变量的真实性总是它的字符串部分吗?

我的Perl 5.26.2 x64(Cygwin)的经验行为是,当且仅当其字符串部分是真实时,双变量才是真实的:

# Falsy number, truthy string => truthy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 0, "foo"; say "yes" if $v'
yes

# Truthy number, falsy string => falsy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 1, ""; say "yes" if $v'

# Truthy number, truthy string => truthy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 1, "foo"; say "yes" if $v'
yes

# Falsy number, falsy string => falsy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 0, ""; say …
Run Code Online (Sandbox Code Playgroud)

perl boolean-expression language-lawyer truthiness

9
推荐指数
1
解决办法
147
查看次数

Perl布尔,否定(以及如何解释)?

我是新来的.在阅读了如何询问和格式化之后,我希望这将是一个好问题.我对perl不是很熟练,但它是我最熟悉的编程语言.

我尝试将Perl应用到现实生活中,但我没有得到很好的理解 - 尤其不是来自我的妻子.我告诉她:

如果她晚上没给我3杯啤酒,那就意味着我喝了零(或没有)啤酒.

你可能已经猜到了,没有太大的成功.:(

事实上,现在.来自perlop:

一元"!" 执行逻辑否定,即"不".

语言,有什么boolean类型(什么只有两个"值")是可以的:

如果它不是一个值 - > 必须是另一个值.

很自然地:

!true  -> false
!false -> true
Run Code Online (Sandbox Code Playgroud)

但Perl不具有boolean变量-只有一个truth system,whrere一切都不是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 …
Run Code Online (Sandbox Code Playgroud)

perl

7
推荐指数
2
解决办法
1万
查看次数

Perl中的布尔函数应该返回什么值?

简短的问题

在Perl代码库中一致表示真假的最佳方法是什么?

  • 1/ 0

  • 1/ Perl的本机布尔运算符
    返回的特殊空字符串?

  • undef

  • () (即空列表)?

问题背景

我们都知道Perl在布尔方面非常灵活,就像大多数事情一样.

例如,Perl将以下内容视为false:,undef()数字0(即使写为000或0.0),空字符串'0'(包含单个0位的字符串).Perl将以下作为真:任何其他的标量值,1,-1,在它(一个空格的字符串' '),'00'多个0的串,"0\n"(跟着一个新行"0"), , 'true','false','undef'等等另外,基于阵列to-scalar和list-to-scalar转换意味着你可以经常使用空数组作为假值.(感谢http://perlmaven.com/boolean-values-in-perl获取Perl接受为真或假的标量值的部分列表.)

但是考虑到所有这些被视为true或false的值,Perl布尔函数应该返回什么?

  • 1/0
  • -1/0 (全息)
  • 1/undef
  • 1/""

如果您使用这些约定中的任何一个,您将很快发现您编写的代码的行为与普通的Perl代码不同.您将无法取代$a<$bcustom_less_than($a,$b),并有它的工作原理完全相同.

考虑:

> perl -e 'use warnings; 
           sub my_eq { return ( $_[0]==$_[1] ? 1 : 0 ) }
           print "compare (1==0) <<".(1==0).">>"
                 ." to my_eq(1,0) <<".my_eq(1,0).">>" …
Run Code Online (Sandbox Code Playgroud)

perl boolean undef

7
推荐指数
2
解决办法
6392
查看次数

整数比较的返回值很奇怪.(1 == 1)是'1'但是(1!= 0)是''(没有)

我的perl脚本在一个机制上工作但在另一个机制上失败.

我使用perl调试器通过在命令中添加"-d"来调试它.即"perl -d my_perl.pl".然后我发现所有"整数比较"仅适用于TRUE结果.

例如,如果我输入debug命令

"x(1 == 1)"

它返回'1'(TRUE).但是如果我输入debug命令

"x(1!= 1)"

它返回''(没有,结果预计为0(FALSE)).

顺便说一下,字符串比较是一样的.x"s"eq"s"返回'1'和x"s"eq"s"返回''.

我使用perl v5.14.2(通过perl -v获取).我的perl有什么问题?我该如何解决?

perl

1
推荐指数
1
解决办法
99
查看次数