perl学习日记1-2 概述和标量数据

1.    概述

通过两个例子(1.4.11.5),了解了perl的运行过程和基本语法

注意到perl没有默认的多行注释,如果非要用,可以去网上查阅,还是有方法的

2.    标量数据

2.1      数字

2.1.1.所有数字内部表示都是一样的,用的是双精度

2.1.2.浮点数

1.25

255.000

255.0

7.25e45 #7.25x10  45 次方(一个大整数)

-6.5e24 # -6.5x10  24 次方(一个大的负数)

-12e-24 #- -12x10 -24 次方(很小的负数)

-1.2E-23 #指数符号可以大写(E)

2.1.3.整数

  0

  2001

  -40

  255

  61298040283768

最后一个读起来有些困难。Perl 允许用下划线来分隔它,因此可以像下面这样书写:

  61_298_040_283_768

2.1.4.非十进制数

0377     #八进制数字 377,等同于十进制数字 255

0xff       #十六进制数字 FF,等同于十进制数字 255

0b11111111 #等同于十进制数字 255

以下方式是便于读,perl允许加下划线

0x1377_0B77

0x50_65_72_7C

2.1.5.数字操作符

2+3       #2+3,5

5.1-2.4  #5.1-2.4,2.7

3*12     #3*12,36

14/2      #14/2,7

10.2/0.3  #10.2/0.3,34

10/3      #通常是浮点除,3.33333... ...

10.2%3.5会自动转换为10%31

2**3,表示 2  3 次方,等于 8

2.2      字符串

2.2.1.单引号字符串

除了反斜杠(/)在自己(/)和单引号()之前要重新考虑,代表显示正常的反斜杠和单引号,其他都是正常字符。注意理解这句话,下面我做了实验,一个程序说明问题:

#!/usr/bin/perl

$a = 'Don/'t tell me that!I need to display the symbol // /n

';

print $a;

输出:

legend@ubuntu:~/data/study/perl$ perl 2.2.1

Don't tell me that!I need to display the symbol / /n

legend@ubuntu:~/data/study/perl$

程序中两个反斜杠作为转义符分别显示单引号和反斜杠,除此之外,其他的字符都不属于转义范畴,包括/n和接下来的回车键,都会照搬输出,明白?

2.2.2.双引号字符串

这种就比较复杂了,不过任何语言都逃不了,在双引号里面的字符中,如果又变量,会直接替换为变量的值,如果有反斜杠,需要仔细辨别它是否具有转义含义,下表列出了各种转义情况:

换行

/n

回车

/r

制表符

/t

formfeed

/f  

退格

/b

响铃

/a

escape(ASCII 中的 escape 字符)

/e

任何八进制值(这里是,007=bell(响铃))

/007

任何十六进制值(这里是,007=bell)

/x7f

一个控制符(这里是,ctrl +c)

/cC

反斜线

//

双引号

/”

下个字符小写

/l

接着的字符均小写直到/E

/L

下个字符大写

/u

接着的字符均大写直到/E

/U

 non-word 字符前加上/,直到/E

/Q

结束/L,/E /Q

/E

 

例子:

“barney”#等同于‘     barney’

“hello world/n”#hello world,换行

“ last character of this string is a quote mark:/”

 the                                              ”

“coke/tsprite”# coke, a tab(一个制表符), sprite

2.2.3.字符串操作符

2.2.3.1.     字符串连接符(.

“hello”. “world”     # 同于 “helloworld”

“hello”. ‘’ “ . world”#同于 “hello world”

‘ hello world’ .“ /n” #同于 “hello world/n”

2.2.3.2.     字符串重复符(x

“fred”x 3       #“fredfredfred”

“barney”x (4+1) #“barney”x 5, “ barneybarneybarneybarneybarney”

5 x 4     #实际上等于“5” x 4 也就是“5555”因为x作为重复符左边必将是字符串,所以会自动把数字转换为字符串。

5 x 4.8     #会先把4.8向下取整为4

5 x 0.5     # 会把0.5变为0,这样就产生了一个空串

2.2.4.数字和字符串的自动转换

Perl会根据后面的操作符决定是否将数字和字符串进行相互转换

“4”*“8”           #会得到32,后面是乘号,两边直接转换为数字

“legend4”*“8”      #一样得到32,如果把4删掉,则为0

“Z”.5*7         #得到”Z35”

perl的自动转换不用害怕难控制,它其实设计的是很人性化的。

2.3      Perl内嵌的警告

打开警告:

运行时perl -w program

如果不想在运行时加参数,可以把参数加到脚本的第一行:#!/usr/bin/perl -w

perl5.6之后可以这样:

       #!/usr/bin/perl

       use warnings;

#这样同样打开了警告

如果用use diagnostics;则是显示比较长的诊断信息,不过这比较费资源,通常在手动运行调试的时候用perl -Mdiagnostics program来打开诊断功能

2.4      标量变量

标量变量在perl中由$开头,赋值时和取值时都要$shell中只是取值时需要,cawk中都不需要,这些要分清楚。

2.4.1.取变量名的风格

其实由很多中方式,不过只要保持一致就行了

推荐这种:$giveMeInitialCaps

2.4.2.二元赋值操作符

c语言一样:

+=-=,*=,/=,

特殊的多了一个字符串连接符.=

2.5      print输出

Print “hello world/n”; #输出字符串

print 6*7;              #输出数字

print “the answer is”,6*7,”./n”;   #输出一个列表

2.5.1.字符串中标量变量的内插

实际上就是双引号字符串的变量替换,如果不要变量内插,直接在$符号前加/转义就行了,这样就打印出了$符号。

花括号的用法:

$what = “brontosaurus steak” ;

$n=3;

print “fred ate $n $whats./n”        #这样打印出来时什么?是$whats的值。要打印$what的值而且想直接在后面接s怎么办?

Print “fred ate $n ${what}s./n”

print “fred ate $n $what”.”s/n”

print “fred ate ”.$n.” ”.$what.”s/n”

2.5.2.操作符的优先性和结合性

4** 4** 2 #4**(3**2)

72/12/3   #(72/12)/3

36/6*3     #(36/6)*3

在第一条中,**是右结合的,所以右边的先进行计算。同样的,由于*/是左结合的,所以要从左到右计算。

2.5.3.比较运算符

数字和字符串分别为:

==          eq

!=           ne

>            gt

<            lt

>=          ge

<=          le

2.6      if控制结构

c语言结构时一样的

if(true或者false)

{

       语句;

}

也可以后接else

{

       语句;

}

2.6.1.boolean

perl和其他语言都不一样,它没有boolean类型,但是其他的类型可以有自己的boolean值,规则是:

数字:0false,非0true

字符串:“”false,非空串则true,但是由于“0”0可以相互转换,此时“0”被系统特殊地认为是false,这是唯一一个特例。

非数字或者字符串:将其转换为数字和字符串之后再按上规则判断。

2.7      用户输入

行输入操作符<STDIN>

它从标准输入读入下一行,默认时键盘,通常时perl等待用户输入一些字符,以换行结束输入。而此时<STDIN>的值最后都是以/n结尾,而实际上通常不需要这个符号,所以用chomp来去掉它

2.8      chomp

该函数需要传入一个字符串变量,把此变量最后的换行符删掉再赋值给该变量,注意如果最后有多个换行符,只删掉一个。

例子:

chomp($line=<STDIN>);      #最常用的用法,直接把$line最后的换行删掉再赋值给$line

 

等价于:$line=<STDIN>;

              chomp($line);

 

如果print chomp($line=<STDIN>);   #会得到1,当然如果最后本来就没有换行,则得到0.

2.9      While控制结构

c语言一样,没什么好说的

2.10 undef

实际上它就是指变量没有被初始化而直接使用时候的值

有两种情况:

数字默认为0

字符串默认为空串

如果直接print $legend;  #什么都不会打印,因为$legend被认为成了空串。

2.11 defined函数

顾名思义,其实就是判断传入的参数变量是否被定义了,具体实现上就是判断传入东西的值的是否是undef

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值