首页 > 代码库 > 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;得到一个列表,仅有一个未定义的元素。