⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 吸引 c 和 java 程序员目光的 perl 5.6 (转).txt

📁 LINUX下的安装声卡等操作和技巧介绍
💻 TXT
📖 第 1 页 / 共 2 页
字号:


此例子中,程序员本来要打印变量 i 的值,结果却敲成了 j。Perl 并不会觉得这段代码有什么问题,它会继续执行打印语句,显示 $j 的值即什么都没有。有些时候,Perl 的自动生成对象的确很有用,但以我的经验来说,最好还是用 "use strict" 来关掉这一自动功能,从而避免上述问题。 

Perl 变量可以是标量 (scalars)、数组 (arrays)或哈希散列 (hashes,又叫做关联数组)。(事实上,Perl 中有多种数据类型,但是程序员并不会直接面对它们。)此外也可以是引用,通常它们也是一种标量类型。其中标量名称以 "$" 开头,数组名以 "@" 开头,而散列则以 "%" 开头。 

标量是 Perl 中最简单的数据类型。每个标量都有唯一的值,或者是字符串或者是引用。在必要的时候,字符串和数字可以互相转化。这常让初学者觉得欣喜异常。看一下这个例子: 

标量 $i = "hi there"; 
print 1+$i; # prints 1 




其中标量 $i 的值是字符串 "hi there",它对应的数值为 0。因此 1 + "hi there" 的值为 1,程序运行结果为 1。 

不过这并不意味着 Perl 解释器在对某个标量分别考虑其字符串类型和数字类型。事实上,在内存中只是一个含有某个值的标量。如果在数值运算的语句中(如加法),这个标量值就转化成数值形式;如果在字符串操作语句中(例如打印),则以字符串形式执行。但无论以什么形式运算,该标量变量实质上只有一个值。 

未定义的标量的值为 "undef"。如果在 C/C++/Java 程序中,您可以将其他值与 null 比较,但在 Perl 中却不能拿任何东西来与 "undef" 做比较。可用这样使用 defined() 函数: 

Use of the defined() function $i = "hi there"; 
print $i if defined $i; # prints "hi there" 
undef $i; # set $i to be undef 
print $i if defined $i; # prints nothing 




数组实质上就是一组标量。如果需要,数组大小可以自动改变,有点象 Java 中的 Vector 类。C 和 C++ 中没有与 Perl 数组类型相当的东西,但它们也有一些提供类似功能的库(如 STL)。数组的一个有趣特性在于,数组的标量数值等于它的元素个数: 

数组中的元素个数 @a = ("hi there", "nowhere"); 
print scalar @a; # prints 2 
push @a, "hello"; # add "hello" at the end 
print scalar @a; # prints 3 




散列与数组类似,但里面的标量并不是按照位置排序的,而是通过另一个标量(必须是唯一值)来进行索引。例如一个用 social security number 作索引的名字列表就是一个散列。将某个键值插入到散列后,该散列会自动扩展。散列与 Java 中的 HashMap 和 Hashtable 类很相似。 

引用类型其实也是标量,它们类似于 C 语言中的指针,能够指向任何东西。这就允许 Perl 生成一个散列的数组、数组的散列、散列的散列、或是数组的数组(多维数组)。有多种方法来获得引用所指向的内容,或者直接使用引用的名字、或者使用 "->" 操作符。引用是一个涉及范围非常广的问题,可以参考 "perldoc perlref" 参考文档来获得更多相关信息。 

C 和 C++ 只有一些固定类型的标量。当程序员要使用数组或哈希散列时,不得不去使用钩子 (hoop) 或是 STL 等外部库。 

Java 中有相当于 Perl 里数组或散列功能的类库,但它们在 Java 语言中并不是那么直接。比如说要对散列上所有元素做操作所需要的时间大约是 Perl 的三倍。 

对散列中所有元素进行操作的 Java 代码 import java.util.Enumeration; 
import java.util.Hashtable; 

Hashtable hi = new Hashtable(); 
// fill in his values 

// we can use an Iterator, still a lot of typing 
for (Enumeration enum = hi.elements(); 
enum.hasMoreElements();) 
{ 
Object o = enum.nextElement(); 
// do something with o 
} 




对散列中所有元素进行操作的 Perl 代码 # note that this even includes the definition and initialization of 
# the hash, and still is more compact than the Java code! 

%hash = { a => "hi", b => "hello" }; 

foreach (values %hash) 
{ 
# do something with $_ 
} 




Perl 的缺憾 
Perl 缺少 C、C++ 和 Java 中的许多特性,但它毕竟是一门完全不同的语言。这几种语言中甚至有许多特性是互相矛盾的。例如 Java 只支持单一继承,而 C++ 则可以有多个父类。这种有冲突的情况下当然不可能继承所有语言的特性,Perl 有它自己处理问题的方法。 

由于 Perl 程序能够被连接到 C 的库中(事实上,这也就是 Perl 应用广泛的原因之一),这就使得几乎没有任何 C 或 C++ 能做而 Perl 不能的事情。 

与 C 和 C++ 相比而言,Perl 有时欠缺的是运行速度。这的确是一个问题,但是通过良好的编程算法以及 Perl 内置函数的使用,就能够克服这一缺点。 

Perl 还不能直接使用 C 和 C++ 的库。必须通过不同的模块和绑定,才能够将这些库中的常量以及函数功能转化成适应 Perl 的样子。这就会导致开发和程序运行的速度降低。但由于 CPAN 库中发布了大量这些方面的模块,因此这个问题并不是那么难以解决, 

在训练编程技巧方面,Perl 并不象 C 和 C++ 那样深入人心。它是一门年轻的语言,虽然很受欢迎,但并未被人们普遍接受。然而,大多数的 UNIX 系统上都安装了 Perl,且其他的操作系统也都支持 Perl。 

Perl 支持单一继承或多继承、封装以及多态,但这仅仅是通过外部模块或程序员的协同来实现的。也就是说,Perl 语言本身并没有严格的面向对象编程规则,需要程序员自己来实现面向对象。这一点有好也有坏,这就要取决于程序员或项目本身了。 

Perl 的线程以及统一字符编码(Unicode)支持远远落后于 Java,也稍微次于 C/C++。Java 从最开始设计就支持线程和 Unicode,而 C/C++ 则比 Perl 拥有更多的时间来调整这方面的正确支持。在 Perl 中,对线程和 Unicode 的支持仍处于起步阶段,但 5.6.0 之后的稳定版本发布之后这一点将得到改观。 

Perl 的优势 
对于 C/C++/Java 程序员而言,Perl 在某些方面的优势是无价的。例如正则表达式在 Perl 中的实现是轻而易举的,但在 C、C++ 或 Java 中实现起来却很麻烦。隐含的函数声明、不严格的语法、以及象日用文档似的程序结构使得 Perl 更具吸引力。 

Perl 并不适合于所有人。它需要读者去适应,却接受它的所有缺点和优点。我们并不是觉得 Perl 酷才采用它,而是因为它的确是一种非常好的工具。如果在解决某个问题时使用其他语言更合适,那么就应该放弃 Perl。一个好程序员的手头总是有好几种有用的工具。 

Perl 有一些小的不足,但那些不知疲惫的程序员会忽略掉这些缺点。如果的确需要线程和 Unicode 支持,或是严格的面向对象编程,那么你只好根据这些需要来选择其他更合适的语言了。 

Perl 是一门通用的灵活的语言,可以象胶水一样将其他许多不同的模型粘合起来。它能够实现任何过程或函数的算法。通常情况下,Perl 会大大减少开发的时间,因为它对某些常见的任务(例如对散列表中的所有元素做操作)只需要少量的代码。最重要的是,Perl 编程总是相当于一个有趣的学习过程。 

资料 

在 CPAN 上可以找到所有你想要的模块。 


查阅这几页 perldoc 帮助文档: perlrun, perlsyn, perlfaq, perlop,perlcc, perlre, 以及 perlref。 


Perl 的作者,Larry Wall 所著的 "Natural Language Principles in Perl"。 


参考 Perl.com 站点上的 Perl 相关信息和资源。 


Programming Perl, 3rd Edition, Larry Wall, Tom Christiansen, 和 JonOrwant 著 (OReilly & Associates, 2000 出版)。这是目前最好的 Perl 指南,并更新了 Perl 5.005 和 5.6.0 版本方面的内容。 


Mastering Regular Expressions, Jeffrey E. F. Friedl 著(OReilly &Associates, 1997 出版)。此书着重于探讨正则表达式方面的所有内容。 


如果您渴望进一步了解 Perl 技术内幕,可以参考 Larry Wall 的主页. 


Perl.org, 另一个重要的 Perl 主页 


Republic of Perl home page是一群致力于 Perl 的程序员的家园 


网上预定 OReilly 的 Perl Conference。 
关于作者 
Teodor Zlatanov,1999 年自波士顿大学毕业并获得计算机工程学士学位。从 1992 年开始就一直从事 Perl、Java、C 和 C++ 方面的编程工作。他的兴趣主要在于文本分析方面的开放源码工作、 3-tired 客户-服务数据库模型、UNIX 系统管理员、CORBA、以及项目管理。您可以通过 tzz@bu.edu 与他联系。 


 

来源:IBM开发网  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -