大家好啊,我来更新第二篇博客了,这篇博客给大家分享一下Perl的教程
分为了上中下三篇哦~~~
✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌✌
我滴主页:❤❤❤小石榴与兄棣伙的结合体(*^▽^*)_-CSDN博客
希望大家三连+关注!!!
Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 "实用报表提取语言"。
Perl 是高级、通用、直译式、动态的程序语言。
Perl 最初的设计者为拉里·沃尔(Larry Wall),于1987年12月18日发表。
Perl 借用了C、sed、awk、shell脚本以及很多其他编程语言的特性。
Perl 最重要的特性是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
本教程适合想从零开始学习 Perl 编程语言的开发人员。当然本教程也会对一些模块进行深入,让你更好的了解 Perl 的应用。
在继续本教程之前,你应该了解一些基本的计算机编程术语。如果你学习过PHP,ASP等其他编程语言,将有助于你更快的了解 Perl 编程。
对于大多数程序语言,第一个入门编程代码便是"Hello World!",以下代码为使用 Perl 输出"Hello World!":
#!/usr/bin/perl print "Hello, World!\n";
Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。
Perl 语言的应用范围很广,除CGI以外,Perl被用于图形编程、系统管理、网络编程、金融、生物以及其他领域。由于其灵活性,Perl被称为脚本语言中的瑞士军刀。
Perl是由Larry Wall设计的,并由他不断更新和维护的编程语言。
Perl具有高级语言(如C)的强大能力和灵活性。事实上,你将看到,它的许多特性是从C语言中借用来的。
Perl与脚本语言一样,Perl不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉Perl来运行而已。这意味着Perl对于小的编程问题的快速解决方案和为大型事件创建原型来测试潜在的解决方案是十分理想的。
Perl提供脚本语言(如sed和awk)的所有功能,还具有它们所不具备的很多功能。Perl还支持sed到Perl及awk到Perl的翻译器。
简而言之,Perl像C一样强大,像awk、sed等脚本描述语言一样方便。
Perl 的 mod_perl 的模块允许 Apache web 服务器使用 Perl 解释器。
也正是因为Perl的灵活性和"过度"的冗余语法,也因此获得了仅写(write-only)的"美誉",因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。
同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。
建议的解决方法是在程序里使用use strict;以及use warnings;,并统一代码风格,使用库,而不是自己使用"硬编码"。Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。
很多时候,perl.exe进程会占用很多的内存空间,虽然只是一时,但是感觉不好。
在我们开始学习 Perl 语言前,我们需要先安装 Perl 的执行环境。
Perl 可以在以下平台下运行:
很多系统平台上已经默认安装了 perl,我们可以通过以下命令来查看是否已安装:
$ perl -v This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level (with 2 registered patches, see perl -V for more detail) Copyright 1987-2013, Larry Wall ……
如果输出以上信息说明已安装,如果还未安装,可以看接下来的安装指导。
我们可以在 Perl 的官网下载对应平台的安装包:Perl Download - www.perl.org
Perl 借用了C、sed、awk、shell脚本以及很多其他编程语言的特性,语法与这些语言有些类似,也有自己的特点。
Perl 程序由声明与语句组成,程序自上而下执行,包含了循环,条件控制,每个语句以分号 ; 结束。
Perl 语言没有严格的格式规范,你可以根据自己喜欢的风格来缩进。
你可以在命令行中使用 -e 选项来输入语句来执行代码,实例如下:
$ perl -e 'print "Hello World\n"'
输入以上命令,回车后,输出结果为:
Hello World
我们将以下代码放到 hello.pl 文件中:
#!/usr/bin/perl # 输出 "Hello, World" print "Hello, world\n";
代码中 /usr/bin/perl 是 perl 解释器的路径。在执行该脚本前要先确保文件有可执行权限,我们可以先将文件权限修改为 0755 :
$ chmod 0755 hello.pl $ ./hello.pl Hello, world # 输出结果
print 也可以使用括号来输出字符串,以下两个语句输出相同的结果:
print("Hello, world\n"); print "Hello, world\n";
perl 代码可以写在一个文本文件中,以 .pl、.PL 作为后缀。
文件名可以包含数字,符号和字母,但不能包含空格,可以使用下划线(_)来替代空格。
一个简单的Perl 文件名:
run_oob.pl
使用注释使你的程序易读,这是好的编程习惯。
perl 注释的方法为在语句的开头用字符#,如:
# 这一行是 perl 中的注释
perl 也支持多行注释,最常用的方法是使用 POD(Plain Old Documentations) 来进行多行注释。方法如下:
#!/usr/bin/perl # 这是一个单行注释 print "Hello, world\n"; =pod 注释 这是一个多行注释 这是一个多行注释 这是一个多行注释 这是一个多行注释 =cut
执行以上程序,输出结果为:
Hello, world
注意:
- =pod、 =cut只能在行首。
- 以=开头,以=cut结尾。
- =后面要紧接一个字符,=cut后面可以不用。
Perl 解释器不会关心有多少个空白,以下程序也能正常运行:
#!/usr/bin/perl print "Hello, world\n";
执行以上程序,输出结果为:
Hello, world
但是如果空格和分行出现在字符串内,他会原样输出:
#!/usr/bin/perl # 会输出分行 print "Hello world\n";
执行以上程序,输出结果为:
Hello world
所有类型的空白如:空格,tab ,空行等如果在引号外解释器会忽略它,如果在引号内会原样输出。
perl 输出字符串可以使用单引号和双引号,如下所示:
#!/usr/bin/perl print "Hello, world\n"; # 双引号 print 'Hello, world\n'; # 单引号
输出结果如下:
Hello, world Hello, world\n
从结果中我们可以看出,双引号 \n 输出了换行,而单引号没有。
Perl双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。
#!/usr/bin/perl $a = 10; print "a = $a\n"; print 'a = $a\n';
输出结果如下:
a = 10 a = $a\n
Here文档又称作heredoc、hereis、here-字串或here-脚本,是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字串的方法。
使用概述:
#!/usr/bin/perl $a = 10; $var = <<"EOF"; 这是一个 Here 文档实例,使用双引号。 可以在这输入字符串和变量。 例如:a = $a EOF print "$var\n"; $var = <<'EOF'; 这是一个 Here 文档实例,使用单引号。 例如:a = $a EOF print "$var\n";
执行以上程序输出结果为:
这是一个 Here 文档实例,使用双引号。 可以在这输入字符串和变量。 例如:a = 10 这是一个 Here 文档实例,使用单引号。 例如:a = $a
如果我们需要输出一个特殊的字符,可以使用反斜线(\)来转义,例如输出美元符号($):
#!/usr/bin/perl $result = "菜鸟教程 \"runoob\""; print "$result\n"; print "$result\n";
执行以上程序输出结果为:
Perl 标识符是用户编程时使用的名字,在程序中使用的变量名,常量名,函数名,语句块名等统称为标识符。
Perl 是一种弱类型语言,所以变量不需要指定类型,Perl 解释器会根据上下文自动选择匹配类型。
Perl 有三个基本的数据类型:标量、数组、哈希。以下是这三种数据类型的说明:
序号 | 类型和描述 |
---|---|
1 | 标量 标量是 Perl 语言中最简单的一种数据类型。这种数据类型的变量可以是数字,字符串,浮点数,不作严格的区分。在使用时在变量的名字前面加上一个 $,表示是标量。例如: $myfirst=123; #数字123 $mysecond="123"; #字符串123 |
2 | 数组 数组变量以字符 @ 开头,索引从 0 开始,如:@arr=(1,2,3) @arr=(1,2,3) |
3 | 哈希 哈希是一个无序的 key/value 对集合。可以使用键作为下标获取值。哈希变量以字符 % 开头。 %h=('a'=>1,'b'=>2); |
Perl 实际上把整数存在你的计算机中的浮点寄存器中,所以实际上被当作浮点数看待。
在多数计算机中,浮点寄存器可以存贮约 16 位数字,长于此的被丢弃。整数实为浮点数的特例。
整型变量及运算:
$x = 12345; if (1217 + 116 == 1333) { # 执行代码语句块 }
8 进制和 16 进制数:8 进制以 0 开始,16 进制以 0x 开始。例如:
$var1 = 047; # 等于十进制的39 $var2 = 0x1f; # 等于十进制的31
浮点数数据如:11.4 、 -0.3 、.3 、 3. 、 54.1e+02 、 5.41e03。
浮点寄存器通常不能精确地存贮浮点数,从而产生误差,在运算和比较中要特别注意。指数的范围通常为 -309 到 +308。
#!/usr/bin/perl $value = 9.01e+21 + 0.01 - 9.01e+21; print ("第一个值为:", $value, "\n"); $value = 9.01e+21 - 9.01e+21 + 0.01; print ("第二个值为:", $value, "\n");
执行以上程序,输出结果为:
第一个值为:0 第二个值为:0.01
Perl 中的字符串使用一个标量来表示,定义方式和 c 很像,但是在 Perl 里面字符串不是用 \0 来表示结束的。
Perl 双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。
但是用单引号定义可以使用多行文本,如下所示:
#!/usr/bin/perl $var='这是一个使用 多行字符串文本 的例子'; print($var);
执行以上程序,输出结果为:
这是一个使用 多行字符串文本 的例子
Perl 语言中常用的一些转义字符如下表所示:
转义字符 | 含义 | |
---|---|---|
\ | 反斜线 | |
\' | 单引号 | |
\" | 双引号 | |
\a | 系统响铃 | |
\b | 退格 | |
\f | 换页符 | |
\n | 换行 | |
\r | 回车 | |
\t | 水平制表符 | |
\v | 垂直制表符 | |
创建八进制格式的数字 | nn\xnn | |
创建十六进制格式的数字 | \cX | |
控制字符,x可以是任何字符 | \u | |
强制下一个字符为大写 | \l | |
强制下一个字符为小写 | \U | |
强制将所有字符转换为大写 | \L | |
强制将所有的字符转换为小写 | \Q | |
将到\E为止的非单词(non-word)字符加上反斜线 | \E | |
结束\L、\U、\Q |
变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间。
解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型、浮点型、字符串等。
上一章节中我们已经为大家介绍了Perl的三个基本的数据类型:标量、数组、哈希。
Perl 为每个变量类型设置了独立的命令空间,所以不同类型的变量可以使用相同的名称,你不用担心会发生冲突。例如 $foo 和 @foo 是两个不同的变量。
$age = 25; # 整型 $name = "runoob"; # 字符串 $salary = 1445.50; # 浮点数
变量不需要显式声明类型,在变量赋值后,解释器会自动分配匹配的类型空间。
变量使用等号(=)来赋值。
我们可以在程序中使用 use strict 语句让所有变量需要强制声明类型。
等号左边为变量,右边为值,实例如下:
$age以上代码中 25, "runoob" 和 1445.50 分别赋值给 $name, $salary 和
接下来我们会看到数组和哈希的使用。
标量是一个单一的数据单元。 数据可以是整数,浮点数,字符,字符串,段落等。简单的说它可以是任何东西。以下是标量的简单应用:
#!/usr/bin/perl $age = 25; # 整型 $name = "runoob"; # 字符串 $salary = 1445.50; # 浮点数 print "Age = $age\n"; print "Name = $name\n"; print "Salary = $salary\n";
Age = 25 Name = runoob Salary = 1445.5
以上程序执行输出结果为:
数组是用于存储一个有序的标量值的变量。
数组 @ 开始。
要访问数组的变量,可以使用美元符号($)+变量名,并指定下标来访问,实例如下所示:
#!/usr/bin/perl @ages = (25, 30, 40); @names = ("google", "runoob", "taobao"); print "$ages[0] = $ages[0]\n"; print "$ages[1] = $ages[1]\n"; print "$ages[2] = $ages[2]\n"; print "$names[0] = $names[0]\n"; print "$names[1] = $names[1]\n"; print "$names[2] = $names[2]\n";
$ages[0] = 25 $ages[1] = 30 $ages[2] = 40 $names[0] = google $names[1] = runoob $names[2] = taobao
以上程序执行输出结果为:
程序中我们在 $ 标记前使用了转义字符 (\) ,这样才能输出字符 $。
哈希是一个 key/value 对的集合。
哈希 % 开始。
如果要访问哈希值,可以使用 $ + {key} 格式来访问:
#!/usr/bin/perl %data = ('google', 45, 'runoob', 30, 'taobao', 40); print "$data{'google'} = $data{'google'}\n"; print "$data{'runoob'} = $data{'runoob'}\n"; print "$data{'taobao'} = $data{'taobao'}\n";
$data{'google'} = 45 $data{'runoob'} = 30 $data{'taobao'} = 40
以上程序执行输出结果为:
所谓上下文:指的是表达式所在的位置。
上下文是由等号左边的变量类型决定的,等号左边是标量,则是标量上下文,等号左边是列表,则是列表上下文。
Perl 解释器会根据上下文来决定变量的类型。实例如下:
#!/usr/bin/perl @names = ('google', 'runoob', 'taobao'); @copy = @names; # 复制数组 $size = @names; # 数组赋值给标量,返回数组元素个数 print "名字为 : @copy\n"; print "名字数为 : $size\n";
名字为 : google runoob taobao 名字数为 : 3
以上程序执行输出结果为:
代码中 @names 是一个数组,它应用在了两个不同的上下文中。第一个将其复制给另外一个数组,所以它输出了数组的所有元素。第二个我们将数组赋值给一个标量,它返回了数组的元素个数。
以下列出了多种不同的上下文:
上下文及描述 | 1 |
---|---|
2 | 标量 − 赋值给一个标量变量,在标量上下文的右侧计算 |
3 | 列表 − 赋值给一个数组或哈希,在列表上下文的右侧计算。 |
4 | 布尔 − 布尔上下文是一个简单的表达式计算,查看是否为 true 或 false。 |
5 | Void − 这种上下文不需要关系返回什么值,一般不需要返回值。 |
插值 − 这种上下文只发生在引号内。 |
好了,今天先到这吧
最后别忘了
点赞,收藏,评论,关注!!!
爱你们哦😙
❤❤❤❤❤❤❤❤❤❤❤❤