相关疑难解决方法(0)

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

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

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

编辑

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

perl boolean boolean-expression

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

Perl相当于(Python-)列表理解

我正在寻找在Perl中表达这个Python片段的方法:

data = {"A": None, "B": "yes", "C": None}
key_list = [k for k in data if data[k]]  
# in this case the same as filter(lambda k: data[k], data) but let's ignore that
Run Code Online (Sandbox Code Playgroud)

所以从一个方面来看,我只想要值为Noneundef的键.从另一个角度来看,我想要的是简洁的perl相当于有条件列表理解.

python perl list-comprehension

13
推荐指数
3
解决办法
7261
查看次数

为什么Perl认为-1是真的?

这是一段常见的示例代码:

while (1) { 
    print "foo\n"; 
}
Run Code Online (Sandbox Code Playgroud)

永远打印'foo'.

perl foo.pl
foo
foo
foo
...
Run Code Online (Sandbox Code Playgroud)

while (0) { print "foo\n"; } 
Run Code Online (Sandbox Code Playgroud)

像你期望的那样安静地死去:

perl test.pl
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这是一个有用的实现吗?这至少适用于5.10,Unix和MacOS X:

while (-1) { print "foo\n"; }
Run Code Online (Sandbox Code Playgroud)

这使

foo
foo
foo
...
Run Code Online (Sandbox Code Playgroud)

perl boolean

12
推荐指数
4
解决办法
796
查看次数

Perl中是否有内置的true/false布尔值?

可能重复:
如何在Perl中使用布尔变量?

[root@ ~]$ perl -e 'if(true){print 1}'
1
[root@ ~]$ perl -e 'if(false){print 1}'
1
Run Code Online (Sandbox Code Playgroud)

我很震惊,true并且false通过if......

perl

10
推荐指数
3
解决办法
2万
查看次数

"如果(1)"做什么?

语法是什么

if (1) {}
Run Code Online (Sandbox Code Playgroud)

做?

我找不到这种语法的文档,1没有被视为布尔值.我对吗?.

perl

4
推荐指数
3
解决办法
9138
查看次数

为什么不= 2 == 4返回false?

我来自C++背景,我正在尝试使用Beginning Perl学习perl.但是,第二章中的这段代码让我感到困惑:

#!/usr/bin/perl
use warnings;
print"Is two equal to four? ", 2 == 4, "\n";
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,这是输出:

Is two equal to four? 
Run Code Online (Sandbox Code Playgroud)

下面进一步解释,2 == 4的值是未定义的,但这对我来说似乎令人困惑和反直觉.两个显然不等于四,4和4之间的相同比较将产生真,导致输出结束时为'1'.为什么表达式不返回false?

perl

4
推荐指数
2
解决办法
339
查看次数

标量 vs 列表赋值运算符

请帮助我理解以下片段:

  • my $count = @array;
  • my @copy = @array;
  • my ($first) = @array;
  • (my $copy = $str) =~ s/\\/\\\\/g;
  • my ($x) = f() or die;
  • my $count = () = f();
  • print($x = $y);
  • print(@x = @y);

perl assignment-operator

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

我如何解释这个if语句

if ( $2 && $3 && $3 != 0 )
Run Code Online (Sandbox Code Playgroud)

Perl中的上述逻辑是什么?在其他语言中,我从未见过像这样的if条件.2美元和3美元只是捕获一些正则表达式的组.

或这个:

if ( $2 && $2 == 0 && $3 && $3 == 0 )
Run Code Online (Sandbox Code Playgroud)

perl

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

"T"和"F"在Perl 5.16.3中有特殊含义吗?

我有一些Perl代码正在做一些奇怪的事情,我无法弄清楚.我在这段代码之前定义了两个变量:

$latestPatch = '000';
$test_setup{appl}{Rev0_OK} = 'F';  # a hash element
Run Code Online (Sandbox Code Playgroud)

两者都被定义为字符串.如果我打印出原始变量(包裹它们),'int($latestPatch)''0''$test_setup{appl}{Rev0_OK}''F'.到目前为止,正如所料.现在我运行以下内容:

$shouldInstall = int($latestPatch) == 0 &&
                 $test_setup{appl}{Rev0_OK} eq 'T';
Run Code Online (Sandbox Code Playgroud)

$shouldInstall最终得到一个空值(false/0预期)!(打印'$shouldInstall'给'').逐步调试语句(未显示)表明int($latestPatch) == 0工作正常,给出1(TRUE),但是$test_setup{appl}{Rev0_OK} eq 'T'为''(因此$shouldInstall是'').如果我将测试更改为$test_setup{appl}{Rev0_OK} eq 'F',则为1(TRUE).如果我将测试更改为$test_setup{appl}{Rev0_OK} ne 'F',则它再次为空.这里发生了什么?没有发出错误消息.我确实有布尔变量TRUE和FALSE(如int 1和0).

aTdHvAaNnKcSe

perl

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

使用作为条件时,字符串的含义是什么?

下面的perl one-liner输出hello to console,那么如何解释这里的错误,因为它不是变量或文字字符串?

perl -e"if (false) {print 'hello'}"
Run Code Online (Sandbox Code Playgroud)

perl

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

//和||是什么?运营商在Perl做什么?

有人可以解释一下这是什么,如果检查和何时通过?

if ( $rate_minimum || 0 ) > ( (4 * $rate_max_min) // 120  ):
Run Code Online (Sandbox Code Playgroud)

抱歉没有成为perl开发人员

perl

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

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