Perl中的真与假深入研究

首页 > 脚本专栏 > perl 更新日期: 2015-11-05
这篇文章主要介绍了Perl中的真与假深入研究,本文详细讲解了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 


> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!

相关文章
  • Perl中的单行注释和多行注释语法
    这篇文章主要介绍了Perl中的单行注释和多行注释语法,本文还同时讲解了其它常见编程语言的单行注释和多行注释语法,需要的朋友可以参考下同其他大多数编程语言一样,Perl中的单行注释也是#开头,例如: 代码如下:#print "Hello,World!";但多行注释,不同的语言有不同的注释方式,比如说:Java,C/C++: 代码如下:/*  ...
  • Perl中怎样从数组中删除某个值
    这篇文章主要介绍了Perl中怎样从数组中删除某个值?本文讲解如何把数组的元素赋值为undef,然后在从数组中删除元素,需要的朋友可以参考下我不确定undef是否和从数组中消除值有确切的关系,猜测一下,如果我们将undef视为"空",那么会有一些联系.但通常来说,将某些东西赋值为undef和删除某些东西是不一样的. 首先来看怎样把数组的元素 ...
  • perl中的范围声明our-my-local介绍
    这篇文章主要介绍了perl中的范围声明our-my-local介绍,这3个关键字都是控制变量范围的,需要的朋友可以参考下老实说,这个东西有点折腾人,主要是书上的表述很晦涩,其实搞懂不难. our,"把名字限于某个范围",其实就是明确声明一个"全局变量",虽然是在某个模块或者函数里面定义的,外面的也可以访问,如果已经声明 ...
  • Perl中chomp和chop的区别介绍
    chomp是用来删除换行符,chop是用来删除最后一个字符chomp是用来删除换行符. 代码如下:#!/usr/bin/perl $c="abcde"; chomp($c); print "$c\n"; [[email protected]]# perl a.pl abcde chop是用来删除最后一个字符. 代码如下:#!/usr/bi ...
  • Perl中处理时间的几个函数
    本文为大家介绍Perl中处理时间的几个函数,供大家学习参考1.time函数:返回从1970年1月1日起累计的秒数 使用:my $t=time(); 2. localtime函数:获取本地时区时间 使用:my $t=localtime(time()); 3.gmtime函数: 获取格林威治时间 使用:my $t=gmtime(time()); 得到格式化时间( ...
猜你喜欢