[ 登录注册 ]

Perl

两个半小时的Perl飞升之旅(1)

2016-07-21 09:59:13 admin 返回上一页

Perl语言是一门高级解释型动态语言,它的许多数据类型是运行时才确定的,并且经常和PHPPython相提并论。Perl从古老的Shell脚本语言中借鉴了许多语法特性,因为被过度使用的各种奇怪符号而声名狼藉,而且许多代码即使借助 Google的搜索功能都不能完全看明白。许多来自 Shell 的语言特性使之成为一门好用的胶水语言: 将其他语言和脚本连接在一起共同工作。

语言非常适合处理文本,并生成更多的文本。Perl语言应用广泛,流行,可移植性极佳,而且有良好的社区支持。Perl 语言的设计哲学是:"每个问题都有许多解决方式"(TMTOWTDI)( 与之相反,Python的设计哲学是:每个问题应该只有一种,而且只有一种明确的,最好的解决方式)。

Perl有令人沮丧的地方,但同时也有许多奇妙的特性。从这一点来看,它同其他任何一种曾经有过的编程语言一样。

这篇文章只是提供一些知识,并不是什么宣传广告,目标读者只是针对像我这样的人:

·厌恶 http://perl.org 上面学术性的文档,那些东西只会长篇累牍的讲述一些永远用不到的边缘问题。

·我只想通过一些通用规则和实例快速了解那些从Larry Wall的角度永远都不关心的基础编程问题

·学些能帮我找到一份工作的基础知识

这篇文档的目的是用短的不能再短的形式来讲。

研究初探

以下声明针对整个文档:“这并不是绝对的,实际情况要复杂的多”。你如果发现一个严重错误,请告诉我。但我保留对孩子们说错话的权利。

在本文档中,我在实例中打印状态,输出数据,但没有明确的追加换行符。这样做是为了避免我发狂,让我能集中精力在实例中字符串的输出,我相信这是更重要的。在许多例子中,实际的输出可能是 "alotofwordsallsmusheduptogetherononeline". 请不要在意。

Hello world

一个 Perl 脚本就是一个后缀为 .pl 的文本文件。

这就是 helloworld.pl 的全文:

  1. use strict;  
  2. use warnings;  
  3. print "Hello world"; 

Perl 脚本被 Perl 的解释器来解释运行,perl 或者 perl.exe:

  1. perl helloworld.pl [arg0 [arg1 [arg2 ...]]] 

说实话, Perl的语法非常宽容,他可以替你预测一些模糊的不知所云的代码的行为,我实在不想讲这些东西,因为你们应当竭力避免这么做。

避免这么做的方法就是将 'use strict; use warnings' 放置在每一个脚本或模块的最前面。'use foo' 这样的语句是编译提示,编译提示是给 Perl.exe 的信号,在程序运行前,对解释器初始化语法验证规则施加影响。在代码运行的时候,解释器将忽略这些东西。' #' 符号是一个注释的开始。注释的结束是到行的末尾。Perl 没有针对块的注释语法。

变量

Perl的变量有三种类型:标量(scalar),数组(array)和哈希(hash)。每种类型有它自己的记号,分别是¥,@和%。变量用my声明,保存到封闭的块(enclosing block)或者文件(file)的结尾。

标量变量

·标量变量可以储存:

·undef(和Nonein Python,nullin PHP一致)

·一个数字(Perl不区分整数(integer)和浮点(float))

·字符串

引用任何其他变量。

  1. my $undefundef = undef;  
  2. print $undef; # prints the empty string "" and raises a warning  
  3.  
  4. # implicit undef:  
  5. my $undef2;  
  6. print $undef2; # prints "" and raises exactly the same warning 
  1. my $num = 4040.5;  
  2. print $num; # "4040.5" 
  1. my $string = "world";  
  2. print $string; # "world" 

(引用的用法稍后讲述。)

用.操作符实现字符串的链接(和PHP一样):

  1. print "Hello ".$string; # "Hello world" 

布尔值(Booleans)

Perl 没有布尔数据类型。只有如下几种值才能在 if 判断语句中返回 'false' :

·undef

·数字 0

·字符串 ""

·字符串 "0"

Perl 文档中经常提到函数在某些情况下会返回 'true' 或 'false'. 实际上,函数通常用 'return 1' 来返回真,用返回空字符串 '' 来表示返回假。

弱类型(Weak typing)

断定一个标量中存储的到底是一个数字或是一个字符串,这是不可能的。更进一步说,根本没必要去确定这个问题。一个标量的行为到底像一个数字或字符串完全取决于它的操作符。当做一个字符串用的时候,标量表现的就是一个字符串,而当做一个数字来用时,它又变成了数字。(如果不可能转换就会有个警告):

  1. my $str1 = "4G";  
  2. my $str2 = "4H";  
  3.  
  4. print $str1 .  $str2; # "4G4H"  
  5. print $str1 +  $str2; # "8" with two warnings  
  6. print $str1 eq $str2; # "" (empty string, i.e. false)  
  7. print $str1 == $str2; # "1" with two warnings  
  8.  
  9. # The classic error  
  10. print "yes" == "no"; # "1" with two warnings; both values evaluate to 0 when used as numbers 

座右铭就是一直用相应的情况下使用合适的操作符。在标量比较中,字符串和数字分别有两套不同的操作符:

  1. # 数字操作符:    <,  ><=, >=, ==, !=, <=>, +, *  
  2. # 字符串操作符:  lt, gt, le, ge, eq, ne, cmp, ., x 

1 2 3 4 5 6 7 8 9 10 下一页>>查看全文
内容导航
 第 1 页:两个半小时的Perl之旅(一)  第 2 页:两个半小时的Perl之旅(二)
 第 3 页:两个半小时的Perl之旅(三)  第 4 页:两个半小时的Perl之旅(四)
 第 5 页:两个半小时的Perl之旅(五)  第 6 页:两个半小时的Perl之旅(六)
 第 7 页:两个半小时的Perl之旅(七)  第 8 页:两个半小时的Perl之旅(八)
 第 9 页:两个半小时的Perl之旅(九)  第 10 页:两个半小时的Perl之旅(十)


文章来源:http://www.bozhiyue.com/perl/2016/0721/285925.html
返回上一页    返回分类 上一篇:   下一篇:
相关