首页 > 代码库 > Perl语言学习笔记 day 1

Perl语言学习笔记 day 1

1、Perl

Practical Extraction and Report Language:实用摘录与报表语言

2、多行注释

(1) =需要顶格写

= description

statement;

=cut

(2)末尾的description需要顶格写

<<description;
  print "Hello,world!\n";
description

3、数字:

所有数字在Perl内都以双精度浮点数格式存储;

5**3:5*5*5;

4、字符串:

最短的字符串为空字符串,最长的没有限制。(Perl会专门存储字符串的长度)

单引号字符串:只有单引号和反斜杠可以转义,如“\n”表示反斜杠和n两个字符,不表示换行符

双引号字符串:支持变量内插、支持各种反斜杠转义,如“\n”表示换行符

反斜杠转义:

\l:将下个字符转为小写;\L:将\E为止的字符全部转为小写;

\u:将下个字符转为大写;\U:将\E为止的字符全部转为大写;

\Q:将\E为止的非单词字符加上反斜杠

\E:结束\L、\U、\Q

用英文句号“.”连接字符串,如“hello”."world" = "helloworld"

字符串重复操作符:x,右边的数字(取整数)表示重复次数,例:"hello" x 3 = "hellohellohello",5x4 = “5555”

变量内插:

$word = "hello";

$words = "$word world!" = "hello world!";

如果$word后边紧跟字符,可以采用:$words = "${word}world!";,或者$words = "$word"."world!";

5、Perl会根据需要自动在字符串和数字之间进行转换

数学计算中字符串的非数字部分将会略过,如“12read32”*3 = 36;

不含数字的字符串转为0;

6、警告信息

(1)运行时使用:perl -w my_program

(2)程序中声明:#!/usr/bin/perl -w 或者#!perl -w

(3)#!/usr/bin/perl

use warnings

(4)更加详细,会导致程序启动变慢:

#!/usr/bin/perl

use diagnostics

7、变量

以$开头,区分大小写。变量一般小写。

8、比较操作符

==:eq、!=:ne、<:lt、>:gt、<=:le、>=:ge;

9、布尔值

数字:0为假,其他都为真

字符串:空字符串为假,其他都为真

其他类型:转为字符串或者数字再判断

字符串‘0‘和数字0是一个值,因此为假

10、获取用户输入:<STDIN>

chomp:去除字符串末尾的最后一个换行符,返回移除的字符数(0/1),例:chomp($text = <STDIN>):读取输入,不含换行符;

可以一次去除列表中元素的换行符,例:chomp(@lines)

命令行输入的数据带有换行符,默认都用chmop处理一下。

11、undef:数字表示0,字符串表示空字符串。

defined($n):判断变量n是否定义

$n = undef:创建一个未定义的变量;

12、数组

数组中最后一个元素的下标:$#arry和-1

@:引用整个数组,例:@Rocks = qw/ bedrock slate lava/ = {"bedrock","slate","lava"}

数组名会被展开为元素列表,逐个赋值给新数组,例:@quarry = {@Rocks,"new",undef} = {"bedrock","slate","lava","new",undef}

pop和push用于操作数组最后一个元素:$num = pop(@arry) = pop @arry;  也可pop @arry,数组为空的话pop返回undef,可以将一个数组push到另外一个数组

shift和unshift用于操作数组第一个元素,$num = shift(@arry),unshift @arry,@others

数组内容可以内插到双引号字符串中,以空格隔开,例:print "quartz @Rocks lime"   > "quartz bedrock slate lava",此处会导致电子邮件地址被误认为数组,可以用\转义或者用单引号。

某个变量后跟着"[",需要将"["隔开,避免被当作数组,例:print "this is $(fread)[3]"、print "this is $fread\[3]";

13、范围操作符:...    例:(1...5) = (1,2,3,4,5)

14、qw 简写:qw{apple good hello} = {"apple","good","hello"} 

可以使用任何标点符号作为定界符:qw{apple good hello} = qw(apple good hello) = qw!apple good hello! = {"apple","good","hello"} 

15、列表赋值

($first,$last) = ("first name","last");

左边变量个数小于列表值个数,多余的值被忽略,左边变量个数大于列表值个数,未赋值的变量是undef

16、foreach可以遍历列表中的值,遍历后控制变量仍然是循环之前的值,例:foreach $rock (@Rocks)();循环之后$rock还是本来的值

17、$_

Perl的默认变量,在未指定变量和数值时,使用"$_"的值。例:foreach没有指定遍历值时,用“$_”替代

18、reverse

按照相反的次序返回列表元素

19、sort

读取列表的值,根据内部的编码排序,一般为ASC|| 编码。

不能将数字当作字符串排序,否则101会在90前边,1开头的会排在9前边

20、上下文

列表上下文中,产生元素的列表

标量上下文中,产生数组元素的个数

强制指定标量上下文:scalar

21、清空数组:@arry = {};

错误做法:@arry = undef;得到一个列表,仅有一个未定义的元素。