Perl学习指南

Perl 学习指南

  • 原 名:Perl 学习指南
  • 作 者:qiang
  • 审 校:JackyCheng
  • 发 表:2005
  • 出 处:中国 Perl 协会 FPC - PerlChina.org

目录

[隐藏]
<script type="text/javascript"></script>

 

首先,来到 Perlchina 就是找对学习 Perl 的第一步。

[编辑] 学习方法

每个人都有不同的学习方法, 下面列举几个供参考

  • 如果 Perl 是你学的第一个编程语言,推荐先看一些编程基础,流程控制,逻辑和设计的知识. _大家有没有好的中文书籍介绍?_
  • 如果你学过其他语言,那就可以从学习 Perl 的语法开始[:http://www.oreilly.com.cn/book.php?bn=7-5083-1113-2 Perl语言入门],或者是从 Perl 的自带文档。当你对 Perl 的语法了解后,尝试书中的例子,试着写一些简单的程序。很快你就会发现 Perl 和你以前学过的语言类似。
  • 如果你是一个有经验的程序员,你可能直接会从读程序,尝试理解开始。虽然不同语言有很多相像之处,但很多时候你还是会迷惑的。推荐至少先了解 Perl 的基本语法。
  • 一个几乎通用的方法是,首先学习文档或书籍,尝试其中的程序例子,试着改动,然后修改出错的地方。然后再接着读,尝试复杂些的程序,重复以上的步骤。阅读+实践是最好的学习方法。

同时,

  • 给自己设一个学习目标,为什么学习 Perl,用 Perl 来做什么。知识是在实践中学到的。试着用 Perl 来写一个留言本,家庭影集,分析日志程序等。不要一上来就打算写一个网络商店的复杂程序,从小的程序开始更容易看到学习的进展,激励自己学习下去。
  • 闭门自学的人往往要花更大的力气学习,而且往往会多走弯路。如果学习 Perl 的时候可以参与到 Perl 的社区里,那么你就可以和其他 Perl 的用户交流经验,获得帮助。如果英文好的话,你可以访问 perlmonks.org 等网站,聚有很多 Perl 的高手。

[编辑] 学习窍门

  • 查询文档
如果你对某个函数的使用不清楚,那么在命令行上使用 perldoc 函数名 来查阅 Perl 自带文档。你也可以把 函数名 替换为模块名来查阅模块文档。例如 perldoc LWP::Simple 当然, 如果英文有困难的话,还是建议阅读 Oreilly 书籍。
  • 程序调试
不管你的程序多短,使用 use warnings 和 use strict 对你找到错误有非常大的帮助。庆幸的是, klaus 已经翻译了一篇绝妙的调试文章 Brian 的 Perl 问题之万能指南
  • 提问的智慧和寻找答案的能力
初学时碰到的许多问题都已经被别人问过了而且很有可能已经被回答了。所以,你要学会使用 google 或论坛搜索你的答案。遇到问题时,你可以把问题表达出来,阅读相关文档,尝试写程序自己解决。如果实在没有头绪的话,最后尝试到论坛里或者是用户组来提问,通常,大家更乐意帮助那些已经对自己的问题作过研究的人,那些只要答案的人常常没人理睬。学习语言是一个自己反复研究,尝试的过程,不要依靠别人的帮助。
有时间你可以看看 提问的智慧帮助你更快得到别人的帮助。

下面这 4 条是 JackyCheng 的见解 (摘自 PerlChina 论坛 http://xrl.us/fz9e )

  • 个人认为学习Perl是一件终身的事情,入门的话,先把Perl基本语法、操作符、函数、控制流程等任何语言都有的基础弄清楚,然后入门后,在根据自己的需要继续发展。
  • Perl是一个大杂烩语言,分支很多,所以我建议你先明确你要用Perl做什么。如果只是简单的想学perl,并没有具体目的,那么入门的时候不易过分综合,有些不实用的东西,了解即可。
  • 学习Perl最重要的事情是实践,很多东西即使顶尖的高手也是无法解决的,所以需要勤于亲身实践。个人认为你应该先去了解一下perl的文化,这样能够多增加一些对于perl的爱好。
  • 另外,perl有句名言叫做“条条大路通罗马”,记住任何事情不止一种方法解决,选择最适合你的,祝你成功。

[编辑] Perl 学习资源

[编辑] 初学者推荐书籍

请只使用大家公认的 Perl 书籍。漏洞百出的书只会把你带入歧途。大部分人都会推荐 Oreilly 出版的 "Perl 丛书":http://www.oreilly.com.cn/indexcat.php?c=perl

[编辑] 推荐在线学习资源
  • 英文文档资源
    • 在线 perldoc 文档
    • 如果你在 C 盘下装有activeperl,可以参考自带的本地文档 file:///C:/Perl/html/index.html
  • 草莓 Perl
    • 草莓 Perl 适用于 Windows 环境,支持 CPAN 模块安装。
取自" http://wiki.perlchina.org/Perl%E5%AD%A6%E4%B9%A0%E6%8C%87%E5%8D%97"

==============================================================

Perl脚本学习笔记

1.    所有数字在Perl内部都是双精度浮点数
2.    字符串也被认为是标量。
3.    数字可以用科学计数法,如-1.2E24, -1.2E-20
      大数字可以写成:234_242_234,不能用逗号,在Perl里它有其他用处
      同理,其他进制数太长时,也可以用_进行划分,如:0x1345_0B33
4.    八进制以0 开头,十六进制以0x 开头,二进制0b 开头
5.    单引号字符串:
      单引号字符串中的/n 不会被当作换行符来处理,其仅仅是两个字符/和n。
6.    字符串重复操作符需要一个字符串作为左操作数。
      复制次数(右操作数)在使用之前会把它转换为小于等于它的整数(如,4.8 变为4)。重复次数小于1 将产生空串(长度为0)。复制次数为0将产生空串。
7.    如果看到不能理解的警告信息,可以使用diagnostics pragma。
      或者在运行时使用-M参数。
8.    在shell 中,当取值时,需要$;赋新值时,不需要$。
      而Perl则都需要。
9.    print多个值时可以使用逗号分开,如:print "hello",6*7;
10.   注意{}的用法。

11.    Perl没有Boolean类型,比较重要的是一点:
    这意味着undef(很快会看到)为false。所有的引用(在Alpaca 书中有详细讨论)都是true。
12.    chomp注意事项:
    (1)chomp 是一个函数。作为一个函数,它有一个返回值,为移除的字符的个数。
    (2)如果结尾有两个或两个以上的换行符,chomp 仅去掉一个。如果没有,那什么也不做,返回0。
13.    数组名字(本例中:fred)和标量是属于完全不同的命名空间(namespace)。同一程序也可以同时包含叫做$fred 的标量变
量。Perl 将它们当作完全不同的事物来看待,不会混淆。(但维护人员可能混淆,所以最好不要将它们以相同的名字来命
名)。
14.    qw中,允许使用任何标点符号作为分界符
16.    可以在数组名前加@来引用整个数组。
15.    注意下面这些特殊的语法:
    ($var1, $var2) = ($var2, $var1);
    @rocks = qw / bedrock slate lava /;
    @tiny = ();        #空表
    @giant = 1..1e5;    #包含100,000 个元素的表
    @stuff = (@giant, undef, @giant);
16.    注意这个迭代:
    foreach $rock (qw/ bedrock slate lava /){
        print “One rock is $rock./n”; #打印出3 种rocks
    }
17.    使用最普遍的默认变量:$_
    It is an alias to the list value, so it can be used to modify the elements of the LIST.
18.    注意一系列的数组操作喊上:
    pop,push,shift,unshift,reserve,sort
19.    注意reverse 返回逆转的列表,它不会改变其参数的值。
    如果返回值没有赋值给某个变量,那这个操作是没有什么意义的:
    reverse @fred; #错误,没有改变@fred 的值
    @fred = reverse @fred; #改变了@fred 的值
    sort函数同理。
20.    注意这两个示例:
    @wilma = undef; #OOPS!得到一个元素的列表(undef),不同于下面的例子
    @betty = (); #将数组置空的正确方法

21.   注意这几种安装模块的方法:
    perl–MCPAN –e shell
    perl -MCPAN -e 'install PadWalker'
    cpan Module::CoreList LWP CGI::Prototype
22.    看看这些赋值语句:
    rocks[0] = talc;
    rocks[1] = mica;
    ...
    ($rocks[0],$rocks[1],$rocks[2],$rocks[3]) = qw/talc mica feldspar quartz/;
    @rocks = qw/talc mica feldspar quartz/;
23.    列表是标量的有序集。数组是包含列表的变量。在Perl 中这个两个术语是可以互换的。但严格意义上讲,列表是指数据,而数组是其变量名。可以有一些值(列表)但不属于数组;但每一个数组标量都有一个列表,虽然其可以为空.
24.    子函数返回的始终是最后一个被计算的表达式的值!一定得小心!
    当然也可以用 return 关键字进行返回。
25.    在Perl 中,会自动将参数列表自动存放在一个叫做@_的数组中。子程序可以访问次数组变量@来确定此参数的个数以及其值。
    这也就是说此子程序参数的第一个值存放在$_[0]中,第二个存放在$_[1],依次类推。但必须强调的是这些变量和$_这个变量没有任何关系
26.    注意这两个赋值语句:
    my ($num) = @_; #列表context, 同($sum) = @_;$num 得到第一个参数,因为其在列表context 中
    my $num = @_; #标量context,同$num = @_;得到参数的个数
    记住,如果没有使用括号,my 仅定义一个变量。
27.    注意这个:
    my $first, $second; #错误!没有定义$barney
    记住,如果没有使用括号,my 仅且只能定义一个变量。
    这样就可以了:my ($first, $second); #两个均定义了
28.    数组的负数索引值从最后一个元素开始。但不要认为这些索引是循环的。如果数组有3 元素,那有效的负数索引值是-1(最后一个元素),-2(中间的元素),-3(第一个元素)。实际上,几乎没有人使用除了-1 之外的其它的负数索引值。

29.    一旦我们将模块载入,无论是否引入特定的函数,我们均可以使用全名进行引用。
    如:
    use File:Basename qw/ /; #没有引入函数
    my $dirname = File::Basename::dirname $name; #使用模块中的dirname
30.    散列:
    %表示进行散列,
    引用《Perl语言编程_3rd》(Larry Wall等人合著)的话:
    “散列是一组无序标量,可以通过和每个标量关联的字符串进行访问.因为这个原因,散列经常被称为关联数组.但是这个名字太长了,因为会经常提到它,我们决定给它起一个简短的名字.我们称之为散列的另外一个原因是为了强调它们是无序的.(在 Perl 的内部实现中,散列的操作是通过对一个散列表查找完成的,这就是散列为什么这么快的原因,而且无论你在散列中存储多少数据,它总是很快).然而你不能 push 或 pop 一个散列,因为这样做没有意义.一个散列没有开始也没有结束.不管怎么样,散列的确非常有用而且强大.如果你不能理解散列的概念,那你还不能算真正的了解 Perl.
    ......
    因为散列是一种特殊的数组,你可以通过 {} 来获取单个的散列元素.比如,如果你想找出与关键字 Wed 对应的值,你应该使用 $longday{"Wed"}.
    ......
    注意这个例子:
    $wife{"Jacob"} = ["Leah", "Rachel", "Bilhah", "Zilpah"];  
    $wife{"Jacob"}[0] = "Leah";
       $wife{"Jacob"}[1] = "Rachel";
       $wife{"Jacob"}[2] = "Bilhah";
       $wife{"Jacob"}[3] = "Zilpah";   
   
    $kids_of_wife{"Jacob"} = {
              "Leah"   => ["Reuben", "Simeon", "Levi", "Judah", "Issachar", "Zebulun"],
              "Rachel" => ["Joseph", "Benjamin"],
              "Bilhah" => ["Dan", "Naphtali"],
              "Zilpah" => ["Gad", "Asher"],};

    $kids_of_wife{"Jacob"}{"Leah"}[0]   = "Reuben";
       $kids_of_wife{"Jacob"}{"Leah"}[1]   = "Simeon";
       $kids_of_wife{"Jacob"}{"Leah"}[2]   = "Levi";
       $kids_of_wife{"Jacob"}{"Leah"}[3]   = "Judah";
       $kids_of_wife{"Jacob"}{"Leah"}[4]   = "Issachar";
       $kids_of_wife{"Jacob"}{"Leah"}[5]   = "Zebulun";
       $kids_of_wife{"Jacob"}{"Rachel"}[0] = "Joseph";
       $kids_of_wife{"Jacob"}{"Rachel"}[1] = "Benjamin";
       $kids_of_wife{"Jacob"}{"Bilhah"}[0] = "Dan";
       $kids_of_wife{"Jacob"}{"Bilhah"}[1] = "Naphtali";
       $kids_of_wife{"Jacob"}{"Zilpah"}[0] = "Gad";
       $kids_of_wife{"Jacob"}{"Zilpah"}[1] = "Asher";”
31.    每个嵌套的 my 会生成一个新变量,每个嵌套的 local 也生成一个新变量。但是每次你使用 our 的时候,你实际上是说同一个变量,不管你有没有嵌套。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值