[Perl语法篇] 04 -- 数据类型:标量$Scalar、数组@Array、哈希%Hash

 -------------------------------------------------------------------------------------------------------------------------------

 I.知识点概要:

    1.标量(数字型、字符型)

-------------------------------------------------------------------------------------------------------------------------------

1.标量$Scalar

  标量是用于存放一个值的变量,这个值可以是数字,也可以是字符串(其实数字就是字符串)。

  Perl通过变量前的“魔符”$来识别标量。

1.1.数字类型标量

# 浮点数直接量
  $Scalar =1.25;
  $Scalar =255.000;
  $Scalar =7.25e45;       # 7.25*10的45次方
  $Scalar =-6.5e24;       # -6.5*10的24次方
  $Scalar =-12e-24;       # -12*10的-24次方
  $Scalar =-1.2E-23;      # 另一种表示法:字母E也可以是大写

# 整数直接量
  $Scalar =0;
  $Scalar =2001;
  $Scalar = -40;
  $Scalar =61298040283768;
  $Scalar =61_298_040_283_768;    # 整数直接量可以插入下划线

# 非十进制整数直接量
  $Scalar =0377;           #八进制以0开头
  $Scalar =0xff;           #十六进制以0x开头
  $Scalar =0b1111;         #二进制以0b开头
  $Scalar =0x1377_0B77;    #整数直接量可以插入下划线
  $Scalar =0b1101_0101;    #整数直接量可以插入下划线

  注1:尽管数字有两种类型:整数、浮点数,但在Perl中总是按照双精度浮点数IEEE-74515位精度)的要求来保存数字并进行运算。

 

1.2.字符串类型标量

# 单引号内字符串直接量
  $Scalar ='fred';           #含4个字符:f、r、e、d
  $Scalar ='';               #空字符串(没有字符)
  $Scalar ='hello\n';        #含7个字符:h、e、l、l、o、\、n
  $Scalar ='\'';             #含1个字符:'(转义)
  $Scalar ='\\';             #含1个字符:\(转义)

# 双引号内字符串直接量
  $Scalar ="fred";           #与'fred'写法一致
  $Scalar ="hello\n";        #hello、换行(转义)
  $Scalar ="ABC\lABC" ;      #ABCaBC(转义)

  1:单引号字符串除单引号()和反斜线(\)外,其他字符都代表自己。要表示单引号或反斜线本身则必须在其前面加上反斜线转义,即(\’)(\\)。

  注2:双引号字符串在单引号字符串基础上扩展了更多的反斜线转义,功能更强大。

  注3:字符串可以是各种字符(字母、数字、标点)任意组合而成,最短的字符串不包括任何字符,即空字符串(与C中不用的是Perl字符串不需要空字符表示结尾);最长的字符串没有限制,甚至可以填满所有内存。

 

1.3.数字与字符串自动转换

  Perl会根据需要,自动在数字与字符串之间进行类型转换,判断依据取决于操作符。对数字进行运算的操作符如果遇到字符串类型操作数,Perl自动字符串转换成等效十进制浮点数进行运算(”12fred34”->12”fred”->0);同样需要字符串的操作符意外得到数字,该数字就会被转换成形式相同的字符串(12->”12”)。

  注1:非十进制表示的数字直接量的“前置零”,不能用于字符串到数字的转换,如’0377’->377,而不是255

 

1.4.标量初始化-undef值、defined函数

  如果还没赋初值就用到某个标量,则此时标量初始值为特殊的undef值,undef值既可被当做数字0,也可被当做空字符串,但undef既不是数字也不是字符串。

  如果要判断某个标量是否被赋初值,则可使用defined函数,如果是undef,该函数返回假,否则返回真。

# undef值、defined函数
  $Scalar =undef;            #undefine
  #$Scalar ='';              #defined
  if ( defined($Scalar) ){
    print "defined"; 
  }else{
    print "undefined"; 
  }

 

1.5.剪除字符串末尾换行符-chomp函数

  chomp函数用于将字符串型标量结尾的换行符(如果存在的话,不存在则不做任何处理)去掉,它的返回值是实际移除的字符数,这个返回值无用处。

# chomp函数
  $Scalar ="hello\n"; 
  chomp($Scalar);

  print "$Scalar";          #输出hello

 

-------------------------------------------------------------------------------------------------------------------------------

 I.参考资料:

    [1]. 盛春译.《Perl语言入门》[第六版][M].东南大学出版社,2012.

           第二章,标量数据

    [2]. 周良忠译.《C程序员精通Perl》[M].人民邮电出版社,2003.

           第2章,Perl基础知识

 II.修订记录:

    2013.01.04.  第一稿

-------------------------------------------------------------------------------------------------------------------------------

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...