Perl基础学习指南.docx

上传人:1564****060 文档编号:94920537 上传时间:2023-08-12 格式:DOCX 页数:12 大小:33.33KB
返回 下载 相关 举报
Perl基础学习指南.docx_第1页
第1页 / 共12页
Perl基础学习指南.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《Perl基础学习指南.docx》由会员分享,可在线阅读,更多相关《Perl基础学习指南.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、什么是 Perl?Perl 是一种最初开发用于文本操作的编程语言。现在它能应用于广泛的任务,包括系统治理、web 开发、 网络编程、 GUI 开发和更多的一般用途。这个语言以有用性为目标易用、高效、完整宁愿失去秀丽小巧、优雅、迷你。它使用便利,且支持面对过程和面对对象编程,内置强大的文本处理支持,并有世界上最令人印象深刻的第三方模块的集中营。运行 Perl 程序在 Unix 命令行运行 Perl 程序:perl progname.pl另一种方法是,把这个放到你的脚本第一行:#!/usr/bin/env perl然后用/path/to/script.pl 运行。固然,首先得让它能执行,你得 ch

2、mod 755 script.plUnix 下。这里的第一行假设你有env 程序。你也可以直接把你的 perl 解释器的路径直接放到第一行, 比方#!/usr/bin/perl安全保障默认状况下,Perl 格外随便。为了使它更强健建议每个程序由以下行开头:1. #!/usr/bin/perl2. use strict;3. use warnings;附加的两行从 perl 中捕获您的代码中的各种常见的问题。它们检查不同的事情,所以你需要两个都加上。一个潜在的问题通过use strict;捕获,一旦它捕获到问题,会马上让你的程序停顿运行。固然使用 use warnings;时,仅仅消灭警告就似乎

3、命令行的-w 选项并不会停顿程序。根本语法概述一个Perl 脚本或程序包含一条或多条语句。这些语句只需直接写在脚本中,而不需要像 main这样的东西作为程序入口。Perl 语句以分别完毕: print “Hello, world“;以星号#开头的语句是注释:# This is a comment这是一条注释空白字符会被 Perl 无视:1. print2. “Hello, world“ 3. ;引号里的字符串除外:1. # this would print with a linebreak in the middle2. print “Hello3. world“;字符串使用双引号或单引号:1

4、. print “Hello, world“;2. print ”Hello, world”;然而,只有双引号会“插入”变量值和像换行符n这样的特别字符转义字符:1. print “Hello, $namen“; # works fine2. print ”Hello, $namen”; # prints $namen literally数字不需要引号:print 42;你可以使用或省略括号来传递函数的参数。它们只是在间或要转变或明确优先级的时候必需使用。1. print(“Hello, worldn“);2. print “Hello, worldn“; Perl 变量类型Perl 有 3

5、种主要的变量类型:标量scalars、数组arrays和哈希hashes。* 标量Scalars一个标量表示只有一个值:1. my $animal = “camel“;2. my $answer = 42;标量的值可以是字符串、整数或浮点数,并且Perl 会在需要的时候自动转换。你不需要预先声明你的变量类型,但是你需要在第一次使用它们的时候,使用 my 来声明它们。这是 use strict;所要求的标量可以用不用的方式使用:1. print $animal;2. print “The animal is $animaln“;3. print “The square of $answer is

6、 “, $answer * $answer, “n“;有大量的“魔法”标量的名称看上去像标点或线路噪音。这些特别的变量用于各种目的。现在你只要知道其中一个,这就是“默认变量”$_。它被很多 Perl 的函数用作默认的参数,并且它被隐式设置到某些循环构造中。print;# prints contents of $_ by default默认打印$_的内容* 数组Arrays数组用于表示一些值的列表:1.my animals = (“camel“, “llama“, “owl“); 2. my numbers = (23, 42, 69);3. my mixed = (“camel“, 42, 1

7、.23);特别变量$#array 将返回数组最终一个元素的索引:print $mixed$#mixed;# last element, prints 1.23你可能想使用$#array + 1 来得到这个数组的元素个数。别急,这很简洁。在 Perl 预想找到一个标量值的时候“在标量上下文”,使用array 会得到数组的元素个数:译注: “上下文”是 Perl 很重要的特性之一,请查阅相关文档或在无忧 Perl 搜寻相关内容if (animals 操作符来美化上面的代码:1. my %fruit_color = (2. apple = “red“,3. banana = “yellow“, 4.

8、 );猎取哈希元素:1.$fruit_color“apple“; # gives “red“你可以通过 keys和 values来猎取键列表和值列表。1. my fruits = keys %fruit_colors;2. my colors = values %fruit_colors;哈希没有特定的内部排序,然而你可以对键进展排序来遍历它。和特别的标量、数组一样,哈希也有特别的。我们现在只要知道哈希%ENV 包括全部环境变量。更简单的数据类型可以使用引用来构造,允许你把列表和哈希放到另一个列表和哈希中。引用是一个标量值,它可以引用任何其它的Perl 数据类型。通过把引用存储为数组或哈希的元

9、素值,你可以轻松创立列表/哈希中的列表/哈希。以下例如演示了使用匿名哈希引用实现的两级哈希构造1. my $variables = 2. scalar = 3. description = “single item“,4. sigil = ”$”, 5. ,6. array = 7. description = “ordered list of items“,8. sigil = ”, 9. ,10. hash = 11. description = “key/value pairs“,12. sigil = ”%”, 13. ,14. ;15.16. print “Scalars begin

10、 with a $variables-”scalar”-”sigil”n“;变量作用域上面全部的例子都使用这种语法:1. my $var = “value“;实际上,my 不是必需的。你可以省略:译注:前提是,你没有使用“use stri语ct句;”1.$var = “value“;但是,上面的用法将创立一个全局变量,这是一个很差的编程实践。my 创立一个词法作用域变量,这个变量只在定义它们的语句块中可见比方一段包在大括号里的语句。1. my $x = “foo“;2. my $some_condition = 1;3. if ($some_condition) 4. my $y = “bar

11、“;5. print $x; # prints “foo“6. print $y; # prints “bar“ 7. 8. print $x; # prints “foo“9. print $y; # prints nothing; $y has fallen out of scope结合使用 my 和在 Perl 脚本开头使用 use strict,解释器将捕获常见的编程错误。比方,在上面的例子中,最终的 print $y 将引发一个编译时错误并阻挡程序运行。猛烈建议使用 use strict 语句!条件和循环语句Perl 有很多常用的条件和循环语句。Perl 5.10 甚至供给了分支语句

12、拼作 given/when。条件可以是任何 Perl 表达式。比较和布尔条件语句中常用的规律运算符,请参阅有关信息的下一节中的运算符的列表。* if1. if ( condition ) 2. .3. elsif ( other condition ) 4. .5. else 6. .7. 还有否认版本的:1.unless ( condition ) 2. .3. 这个否认版比 if (!condition)更易读。留意,大括号是必需的,即使代码块中只有一行。不过,这里有一个方法可以让你通过类似英语的语法来实现单行条件语句:1. # the traditional way2. if ($zip

13、py) 3. print “Yow!“; 4. 5.6. # the Perlish post-condition way7. print “Yow!“ if $zippy;8. print “We have no bananas“ unless $bananas;* while1.while ( condition ) 2. .3. 为了和 unless 同样的理由,也有一个否认版本:1.until ( condition ) 2. .3. 你也可以在后置条件里使用 while:print “LA LA LAn“ while 1;# loops forever* for跟 C 语言一样:1.

14、for ($i = 0; $i = $max; $i+) 2. .3. 自然 Perl 供给了更友好的列表遍历循环 foreach 以后,C 语言风格的for 循环在 Perl几乎不需要了。* foreach1. foreach (array) 2. print “This element is $_n“; 3. 4.5. print $list$_ foreach 0 . $max; 6.7. # you don”t have to use the default $_ either.8. foreach my $key (keys %hash) 9. print “The value of

15、 $key is $hash$keyn“;10. 内置操作符和函数Perl 附带了各种各样的内置函数。我们已经看到的几个,包括 print,sort 和 reverse。Perl 常见操作符运算符* 算术1.+ 加法2. - 减法3. * 乘法4. / 除法* 数字比较1.= 等于2. != 不等于3. 大于5. = 大于等于* 字符串比较1. eq 等于2. ne 不等于3. lt 小于4. gt 大于5. le 小于等于6. ge 大于等于为什么数字和字符串的比较运算符不同?由于我们没有不同的变量类型,并且 Perl需要知道是以数字进展排序99 小于 100还是以字母进展排序100 在 9

16、9 前面* 规律1. & and 和2. | or 或3. ! not 否* 混合1.= 赋值2. . 字符串连接3. x 字符串乘法4. . 范围 (建立一个列表)一些操作符可以和=结合,像这样:1.$a += 1; # same as $a = $a + 12. $a -= 1; # same as $a = $a - 13. $a .= “n“; # same as $a = $a . “n“;文件和 I/O你可以使用 open函数来翻开一个文件,用于输入或输出:1. open(my $in, “, “output.txt“) or die “Can”t open output.txt:

17、 $!“;3. open(my $log, “, “my.log“) or die “Can”t open my.log: $!“;你可以使用操作符从翻开的文件句柄中读数据。在标量上下文中,它从文件句柄中读取一行;在列表上下文中,它读取整个文件,并将每一行作为列表的元素。1. my $line = ;2. my lines = ;一次性把整个文件读完,叫做“啜食slurping”。它能让人满足,但它可能是内存吞噬者。大多数文本文件处理可以通过 Perl 的循环构造,一行一行地完成。操作符常常消灭在 while 循环里:1. while () # assigns each line in tur

18、n to $_2. print “Just read in this line: $_“; 3. 我们已经看到了如何使用 print在标准输出里打印。但是,print还能通过第一个可选参数指定一个文件句柄来打印译注:将内容输出到指定的文件句柄中,即写入到文件句柄相关联的文件中1. print STDERR “This is your final warning.n“;2. print $out $record;3. print $log $logmessage;当你完成了对文件句柄的操作之后,你应当使用close来关闭文件句柄。狡猾说,假设你遗忘关闭了,Perl 会帮你处理。close $in

19、 or die “$in: $!“;正则表达式Perl 对正则表达式的支持宽广而深入:* 简洁匹配1. if (/foo/) . # true if $_ contains “foo“2. if ($a = /foo/) . # true if $a contains “foo“/匹配操作符译注,完整的应当是:m/默认操作$_,或者使用=来绑定其它变量 进展操作。* 简洁置换1. s/foo/bar/; # replaces foo with bar in $_2. $a = s/foo/bar/; # replaces foo with bar in $a3. $a = s/foo/bar/

20、g; # replaces ALL INSTANCES of foo with bar in $a* 更简单的正则表达式你不仅能匹配固定的字符串。其实,你可以匹配任何你能想到的简单正则表达式。1. .单个任意字符默认不包含n2. s 一个空白字符 (空格, tab, 换行, .)3. S 一个非空白字符4. d 一个数字 (0-9)5. D 一个非数字6. w 一个能组成单词的字符 (a-z, A-Z, 0-9, _)7. W 一个不能组成单词的字符8. aeiou 匹配中括号内的任意一个字符9. aeiou 匹配除了中括号内列出的字符之外的任意一个字符10. (foo|bar|baz) 匹配

21、 foo 或 bar 或 baz 11.12. 匹配开头13. $ 匹配结尾量词可用来指定数量:1. * 零个或任意多个2. + 至少一个3. ? 零个或一个4. 3 3 个5. 3,6 3 到 6 个6. 3, 至少 3 个一些简洁的例子:1. /d+/ 以一个或多个数字开头2. /$/ 空的,没有任何东西3. /(ds)3/ 3 个带空白字符的数字4. (比方 “3 4 5 “)5. /(a.)+/ 匹配最少一次,含有a 和任意字符6. (比方 “abacadaf“) 7.8. # 从 STDIN 循环读入,并打印出非空白行:9. while () 10. next if /$/;11.

22、print;12. * 圆括号捕获括号的另一个用法是分组。它可以用来捕获最终使用的正则表达式匹配的结果。这些结果用$1、$2 表示。1. # a cheap and nasty way to break an email address up into parts 2.3. if ($email = /(+)(.+)/) 4. print “Username is $1n“;5. print “Hostname is $2n“;6. 子程序写一个子程序是很简洁的:1. sub logger 2. my $logmessage = shift;3. open my $logfile, “, “m

23、y.log“ or die “Could not open my.log: $!“;4. print $logfile $logmessage; 5. 现在我们可以像使用其它内置函数一样,使用该子程序了:1.logger(“We have a logger subroutine!“);什么是 shift?传递给子程序的参数保存在_数组中。shift 函数的默认参数是_。所以 my$logmessage = shift;去掉第一个参数,并将其赋值给$logmessage。可以通过别的方法操作_:1. my ($logmessage, $priority) = _; # common通用2. my

24、 $logmessage = $_0; # uncommon, and ugly不通过,并且很丑陋 子程序可以返回值:#sub square # my $num = shift;# my $result = $num * $num; # return $result;# 然后像这样使用它:1.$sq = square(8); Perl 面对对象Perl 面对对象相比照较简洁,这是实现使用引用什么样的对象知道自己是在 Perl 的概念为基础的封装。刚开头进展 Perl 编程,你最常使用的 Perl 面对对象将是使用第三方模块,参见下文。使用 Perl 模块Perl 模块供给了一系列的功能,可帮助您避开重复劳动,它们可以通过 CPAN cpan.org下载。很多流行的模块都已经包含在了 Perl 发行包中。本文由无忧 Perl 51perl 翻译,转载请注明本文链接: 51perl /perl-brief-introduction/水平有限,错误难免,欢送指正,并以原文为准。原文地址: :/perldoc.perl.org/perlintro.html期望对你有用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁