Perl中的真与假深入研究

Perl认为真值是自明的(self-evident), 表示任何事物的真值都可以计算。Perl以实用的方式来定义真值,即一个实体的真值取决于这个实体的类型。Perl总是乐观的认为:这个世界上真的东西远比假的东西多的多。

Perl区别与任何其他计算机语言,Perl是语言学家创造的,而语言的意思离不开上下文语境,所以Perl中的真值都可以在标量(标量$与数组@类似于英文中的单数与复数, book 与 books的区别, 真值在现实世界中,应该就是单数,所以是标量)计算,除此之外,不会做任何类型的强制转换(比如在Python中int('42')来将含数字的字符型转换int类型,在Java中(int)'d'将字符型转为整型)。

对于标量中各种类型的值,规则如下:

字符型: 除了""和"0",所有字符都是真(true)
数字型: 除了0外,所有数字都是true
引用型: 所有引用都为true(所有引用都会指向有地址的对象,这绝对不会为0,因为它肯定已定义)
未定义: 所有未定义值都是false

下面例子可以很好理解Perl中真、假的概念:

代码如下:

0           # 将转换为字符串"0",所以为false 
1           # 将转换为字符串"1",所以为true 
100 - 100   # 100-100等于0,这将转换为字符串"0",所以为false 
0.00        # 等于0,将转换为字符串"0",所以为false 
"0"         # 字符串"0",所以为false 
""          # 这是空串,所以为false 
"0.00"      # 即不是"",也不是"0",所以为true 
"0.00" + 0  # 由+强制转换,计算结果为0,所以为false 
\$a         # 标量$a的引用,所以为true,即使$a为false也是如此。 
undef()     # 是一个返回未定义值的函数,所以为false

(0)

相关推荐

  • Perl中的真与假深入研究

    Perl认为真值是自明的(self-evident), 表示任何事物的真值都可以计算.Perl以实用的方式来定义真值,即一个实体的真值取决于这个实体的类型.Perl总是乐观的认为:这个世界上真的东西远比假的东西多的多. Perl区别与任何其他计算机语言,Perl是语言学家创造的,而语言的意思离不开上下文语境,所以Perl中的真值都可以在标量(标量$与数组@类似于英文中的单数与复数, book 与 books的区别, 真值在现实世界中,应该就是单数,所以是标量)计算,除此之外,不会做任何类型的强制

  • Python中True(真)和False(假)判断详解

    目录 前言 1.True和False的逻辑取反 2.if条件语句中的True和False 3.pandas.DataFrame.loc 中的否定 总结 前言 Python中的 True和 False总是让人困惑,一不小心就会用错,本文总结了三个易错点,分别是逻辑取反.if条件式和pandas.DataFrame.loc切片中的条件式. 1.True和False的逻辑取反 在对True和False进行逻辑取反时,不使用~,而要使用not. 因为在Python中,not才是逻辑取反,而~是按位取反.

  • Perl中常见符号与操作

    注释: 1.单行: #print 2.多行:=pod -. =cut 查询perl相关: Perldoc perlvar($a,$$,$"...) Perldoc perfunc(sort-) Perldoc perl 查看perldoc文章列表 Perldoc –q 正则表达式 Perldoc –f 函数名 Perldoc module_name 查看模块 Perldoc –v 变量名 查看变量 Perldoc perlop 查看操作符 查看模块相关函数: 1.Perl –d –e 0 2.U

  • Perl中的控制结构学习笔记

    一.条件判断 复制代码 代码如下: if ( ) {       }   elsif ( ) {       }   ...   else{       } 建立i f语句的另一种方法是使用多个表达式,然后根据哪个表达式是真,来运行代码:可以像下面这样来读取上面这个语句块:如果标号为e x p r e s s i o n 1的表达式是真,那么语句块B L O C K 1就运行.否则,控制权转给e l s i f,对e x p r e s s i o n 2进行测试,如果该表达式是真, 则运行B

  • Perl中的符号 ->;、=>; 和 :: 分别表示什么意思?

    What do the ->, => and :: symbols mean? The -> is the "infix dereference operator". In other words it is the means by which one calls a sub with a pass by reference (among other things you can do with ->). As stated above most things

  • Perl中的特殊符号介绍

    $_   俗称perl的老地方,当你的程序中未告知使用哪个参数或者变量时,perl就会自动使用$_中的值,比如 for(1..10){ print ; } 这里print没有指定参数,所以它就会使用$_,那$_里面是什么呢?每次循环$_的值都会变化,所以$_实际上就是1 .. 10这10个值,所以上面的代码打印的结果就是12345678910 $! 当且仅当某个函数调用失败时才会设置该变量,所以经常这样使用这个变量 open FILE,"<d:/code/zdd.txt" or

  • Perl中的单行注释和多行注释语法

    同其他大多数编程语言一样,Perl中的单行注释也是#开头,例如: 复制代码 代码如下: #print "Hello,World!"; 但多行注释,不同的语言有不同的注释方式,比如说: Java,C/C++: 复制代码 代码如下: /*  *注释若干行  *注释若干行  *注释若干行 */ Python: 复制代码 代码如下: """  用三个双引号,多行注释  用三个双引号,多行注释  用三个双引号,多行注释 """ '''

  • 讲Perl中的本地时间与UNIX时间戳间相互转换的方法

    当你的Perl脚本需要解决时间信息,这里有两种方法来表示和处理日期和时间.一种方法是易读的时间表示(例,"Sat Mar 14 10:14:05 EDT 2015"),另外一种是使用UNIX时间戳(也叫"新纪元时间"),这是从1970年1月1日到今所经过的时间秒数.每一种方法都有它自己的优劣势,取决于你的需要,也许也就需要转换一种格式到另一种. Perl中转换本地时间到UNIX时间戳 为了从日期字符串中获得UNIX时间,可以使用Date::Parse模块中str2t

  • Perl中的列表和数组学习笔记

    一.列表 列表是包含在括号里的一序列的值,可以为任何数值,也可为空,如:(1, 5.3 , "hello" , 2),空列表:(). 注:只含有一个数值的列表(如:(43.2) )与该数值本身(即:43.2 )是不同的,但它们可以互相转化或赋值.列表例: 复制代码 代码如下: (17, $var, "a string")     (17, 26 << 2)     (17, $var1 + $var2) ($value, "The answer

  • Perl中的文件读写学习笔记

    一.打开.关闭文件 语法为open (filevar, filename),其中filevar为文件句柄,或者说是程序中用来代表某文件的代号,filename为文件名,其路径可为相对路径,亦可为绝对路径. 复制代码 代码如下: open(FILE1,"file1");  open(FILE1, "/u/jqpublic/file1"); 打开文件时必须决定访问模式,在PERL中有三种访问模式:读.写和添加.后两种模式的区别在于写模式将原文件覆盖,原有内容丢失,形式为

随机推荐