主页 > 程序员中山人才网

perl如何调用其他的perl文件?

108 2024-06-07 11:20

一、perl如何调用其他的perl文件?

可以使用两种方法:

1.require "xxx.pl";

2.use xxx.pm;加入require或者use在perl中相当于将文件xxx.pl/pm整个文件都添加到调用它的文件中;例如:gettime.pl#!/usr/bin/perlprint "gettime is 2011-07-25 14:40:10\n";showtime.pl#!/usr/bin/perlrequire "gettime.pl";print "get time ok\n";则执行showtime.pl会显示:gettime is 2011-07-25 14:40:10get time ok

二、perl$$含义?

自带的全局变量,默认值为“\n". perl中”行“的概念就由$/决定。{$data = "this>";local $/ = ">";chomp($data);}$data的值就是”this".

三、perl是什么?

Perl是一种高级编程语言。 因为Perl是一种开放源代码的脚本语言,它可以进行文本操作、提供系统管理等多种编程方式,被广泛用于Web开发、系统管理、数据处理等领域。Perl的语法简洁灵活,容易上手,而且它的模块丰富,可以很好地支持开发。因此,Perl是一种很重要的编程语言。 此外,虽然Perl已经存在了很长时间,但它的社区一直在持续发展,有很多开发者为Perl做出了贡献。Perl的开发者也一直在更新版本,以适应最新的开发需求和技术趋势。

四、perl 现状

Perl 现状

Perl 是一种通用的高级编程语言,起源于上个世纪八十年代末和九十年代初的美国。它被设计用于文本处理,特别是处理文本数据。随着时间的推移,Perl 已经发展成为一个功能强大且灵活的编程语言,在网页开发、系统管理、网络编程等领域都有着广泛的应用。然而,随着后续编程语言的涌现和发展,Perl 在某种程度上有些被忽视了。

Perl 的历史

Perl 最初由Larry Wall创造于1987年,随后于1988年发布了Perl 1.0版本。Perl 被设计用于字符串处理,其语法和功能受到了C语言、shell脚本、AWK以及许多其他编程语言的影响。1994年发布的Perl 5.0版本加入了面向对象编程功能,极大地提升了Perl语言的可扩展性和灵活性。

Perl 曾一度成为Web开发的主流语言之一,特别是在动态网站和CGI编程方面。然而,随着Python、Ruby、PHP等语言的不断兴起,Perl 在Web开发领域的地位逐渐式微。虽然如此,Perl 仍然被广泛用于系统管理、文本处理等领域。

Perl 的优势

Perl 以其强大灵活的文本处理能力而闻名,在处理字符串、正则表达式、文件操作等方面表现出色。Perl 又是一种解释型语言,无需编译即可执行,使得开发、调试更为方便。此外,Perl 社区庞大,有着丰富的模块和工具库,使得开发者可以轻松借助现成的资源快速完成任务。

作为一种多范式编程语言,Perl 支持面向过程、面向对象、函数式等多种编程风格,开发者可以根据具体需求选择合适的编程方式。Perl 的灵活性也同样体现在其数据结构的处理上,支持数组、哈希、列表等多种数据结构,使得程序开发更为便捷。

Perl 的劣势

尽管Perl 有着诸多优势,但也存在一些劣势。首先,Perl 的语法相对复杂,充斥着各种特殊符号和难以理解的语法规则,这使得初学者入门有一定难度。其次,Perl 在性能方面相对较弱,与一些现代语言相比,Perl 的执行速度较慢,尤其在大规模任务下表现不佳。

另外,在Web开发领域,Perl 已经逐渐被更现代的语言所取代。Python、Ruby、PHP等语言在Web框架、模板引擎等方面有着更好的支持和发展,使得开发Web应用更为高效。因此,对于那些追求Web开发效率和性能的项目来说,Perl 或许并非最佳选择。

Perl 的前景

尽管 Perl 在一些领域的应用有所减退,但它仍然在系统管理、文本处理等领域有着广泛的应用。Perl 依然是许多开发者心目中的得力助手,在处理日常任务时发挥着重要作用。此外,Perl 社区依然活跃,不断有新的模块、工具库被开发和发布,使得 Perl 在功能和生态方面不断得到丰富和完善。

作为一门历史悠久的编程语言,Perl 在一定程度上已经成为一种编程文化的象征。它的存在和发展体现了编程界技术的传承和创新,不同于新兴语言的潮流,Perl 仍然在坚守自己的领域,为开发者提供着独特的编程体验和工具支持。

结语

综合来看,虽然 Perl 在Web开发领域有所衰退,但在系统管理、文本处理等方面仍然有其独特的优势和价值。对于那些有特定需求的项目来说,Perl 仍然是一个值得考虑的选择。同时,随着时间的推移,Perl 或许会继续演变和发展,适应新的技术趋势,保持其在编程社区的地位。

五、perl语言用途?

用于在UNIX环境下编程。

Perl具有高级语言(如C)的强大能力和灵活性。事实上,你将看到,它的许多特性是从C语言中借用来的。

与脚本语言一样,Perl不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉Perl来运行而已。这意味着Perl对于小的编程问题的快速解决方案和为大型事件创建原型来测试潜在的解决方案是十分理想的。

Perl提供脚本语言(如sed和awk)的所有功能,还具有它们所不具备的很多功能。Perl还支持sed到Perl及awd到Perl的翻译器。

简而言之,Perl象C一样强大,象awk、sed等脚本描述语言一样方便。

六、unix环境下,在perl脚本中如何source tcl脚本和调用其他perl脚本 - Perl -?

如果你是直接调用整个脚本的话,可以直接调用命令行的形式,比如我在

A脚本中要调用B.pl脚本那么我就直接用`perl B.pl`;就可以了。

如果是要调用其他脚本中的函数的话,那么就需要require了。

比如你有一个函数集的脚本,你要调用它,脚本名字和路径为 D:\\B.pl

那么你在A脚本开始的时候加上一句require("D:\\B.pl");就可以啦。不过有的时候编译会提示错误,所以还得注意语法了,需要根据错误进行修改的。

七、centos yum perl

CentOS YUM Perl 是很多 Webmaster 日常工作中常常会接触到的关键词。CentOS 作为一款开源的 Linux 操作系统,拥有稳定性好、兼容性强等诸多优点,因此被广泛用于服务器环境中。YUM 则是 CentOS 中的软件包管理工具,可以方便地进行软件的安装、更新和卸载。而 Perl 作为一种强大的脚本语言,也被广泛应用于 Web 开发领域,为网站的优化提供了便利。

CentOS

CentOS 是以 Red Hat Enterprise Linux(简称 RHEL)为基础所构建的一个免费 Linux 发行版。它继承了 RHEL 的稳定性和安全性,同时提供了长期支持和更新。由于 CentOS 的特点,很多网站服务器选择将其作为操作系统,用于托管网站和应用程序。

YUM

YUM 是 CentOS 中常用的软件包管理工具,全称为 Yellowdog Updater, Modified。通过 YUM,Webmaster 可以方便地安装、更新和删除软件包,而无需手动处理依赖关系。YUM 的使用简单方便,大大提高了工作效率。

除了常规的软件包管理功能外,YUM 也支持不同的插件,例如安全插件、速度插件等。这些插件可以帮助 Webmaster 更好地管理服务器上的软件包,保证系统的稳定性和安全性。

Perl

Perl 是一种高级的动态编程语言,具有强大的文本处理能力和灵活的语法。在 Web 开发中,Perl 经常被用于编写 CGI 脚本、处理表单数据等任务。由于 Perl 的强大功能和丰富的模块库,Webmaster 可以轻松地完成各种复杂的编程任务。

此外,Perl 也被广泛用于系统管理和网络编程等领域。Webmaster 可以利用 Perl 来编写脚本,自动化执行常见任务,提高工作效率。对于网站优化来说,Perl 可以帮助 Webmaster 快速处理大量数据,实现个性化需求。

结语

总的来说,CentOS YUM Perl 三者在 Webmaster 的工作中起着重要的作用。CentOS 提供了稳定的操作系统环境,YUM 能够方便地管理软件包,Perl 则为 Webmaster 提供了强大的脚本编程能力。熟练掌握这三者,可以帮助 Webmaster 更好地进行网站优化,提升用户体验,实现业务目标。

八、centos 7 perl

CentOS 7 是一款备受欢迎的开源操作系统,广泛应用于企业服务器和个人计算机。作为基于 RHEL(Red Hat Enterprise Linux)的免费替代品,CentOS 7 提供了稳定可靠的操作环境,以及丰富的软件包管理系统,适用于各种不同的工作场景。

CentOS 7 的特点

CentOS 7 包含了许多令人印象深刻的功能和特点。首先,它拥有强大的安全性,提供了诸如 SELinux 和防火墙等安全功能,确保用户数据和系统受到有效保护。其次,CentOS 7 提供了广泛的软件支持,包括 Web 服务器、数据库服务器、开发工具等,满足用户的各种需求。此外,CentOS 7 还具有稳定性高、性能优越的特点,适用于生产环境的部署。

Perl 在 CentOS 7 中的应用

Perl 是一种功能强大的脚本语言,被广泛应用于文本处理、系统管理、网络编程等领域。在 CentOS 7 中,Perl 作为一种默认安装的解释器语言,为开发人员和系统管理员提供了强大的工具,简化了许多日常任务的处理。

通过在 CentOS 7 中使用 Perl,用户可以轻松处理各种文本文件、日志文件,快速编写脚本来完成自动化任务等。Perl 的强大的正则表达式功能和灵活的语法,使其成为处理各种数据格式的理想选择。此外,Perl 在网络编程和系统管理方面也有着丰富的模块和库,为用户提供了丰富的选项和支持。

如何在 CentOS 7 中使用 Perl

要在 CentOS 7 中使用 Perl,首先需要确保系统已经安装了 Perl 解释器。可以通过在终端中输入 perl -v 命令来检查 Perl 的版本信息。如果系统中没有安装 Perl,可以通过包管理器来安装,例如使用 yum install perl 命令进行安装。

一旦 Perl 安装完成,用户就可以编写 Perl 脚本并在终端中执行。通过创建包含 Perl 代码的文件,并在文件开头添加 #!/usr/bin/perl 指定 Perl 解释器的路径,然后赋予文件执行权限,即可在终端中运行该 Perl 脚本。

除了在终端中直接执行 Perl 脚本外,用户还可以将 Perl 脚本集成到系统任务中,实现定时任务、监控任务等功能。通过在 crontab 中添加相应的定时任务配置,用户可以轻松地实现对系统的自动化管理。

Perl 在系统管理中的应用

Perl 在系统管理中有着广泛的应用。用户可以利用 Perl 编写脚本来实现系统配置、日志分析、性能监控等任务。通过 Perl 提供的丰富模块和函数库,用户可以编写高效且可靠的系统管理脚本,提高工作效率。

例如,用户可以编写一个 Perl 脚本来监控系统的磁盘空间使用情况,定期检查磁盘空间是否超过阈值,并发送警报通知管理员。这样可以帮助管理员及时发现并解决磁盘空间不足的问题,保障系统的稳定运行。

此外,Perl 还可以用于系统配置管理。管理员可以编写 Perl 脚本来管理用户账号、权限设置、服务配置等系统参数,实现快速、可靠的系统配置更新。借助 Perl 的灵活性和强大功能,系统管理员可以更好地管理和维护系统。

结语

总之,CentOS 7 是一款功能强大且稳定可靠的操作系统,适用于各种不同的工作场景。在 CentOS 7 中,默认安装的 Perl 解释器为用户提供了强大的脚本编程工具,能够帮助用户简化日常任务处理、系统管理等工作。

通过合理运用 Perl 在 CentOS 7 中的应用,用户可以提高工作效率,简化系统管理,并更好地应对各种复杂的工作环境。希望以上内容能够帮助读者更好地了解 CentOS 7 和 Perl 的应用,为其工作和学习带来帮助。

九、perl 解析json

使用Perl解析JSON数据

在当今信息时代,数据以各种形式存在并流动着。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式在Web开发中被广泛应用。在Perl编程语言中,解析JSON数据是一项常见的任务,可以通过一些现成的模块来处理这一任务。

什么是JSON?

JSON是一种用于存储和交换数据的轻量级格式。它基于JavaScript语法,但可以被多种编程语言解析和生成。JSON由键值对组成,具有易读性和易解析性的特点,常用于RESTful API的数据传输。

Perl解析JSON的常用模块

1. JSON模块

Perl的JSON模块是最常用的用于解析JSON数据的模块之一。它提供了从JSON数据到Perl数据结构的转换,以及反向转换的功能。使用JSON模块,可以轻松地在Perl程序中处理JSON数据。

2. JSON::XS模块

JSON::XS是一个高效的JSON处理模块,相比于JSON模块,它性能更好。如果你需要处理大量数据或对性能要求较高,可以考虑选择JSON::XS模块。

3. Cpanel::JSON::XS模块

Cpanel::JSON::XS是JSON::XS的一个变种,提供了一些额外的功能和改进。它是cPanel开发的JSON处理模块,可以在一些特定场景下发挥作用。

使用JSON模块解析JSON数据的示例

下面是一个简单的示例,演示了如何使用Perl中的JSON模块解析JSON数据:

use JSON; my $json_text = '{ "name": "Alice", "age": 30, "is_student": false }'; my $data = decode_json($json_text); print "Name: $data->{name}\n"; print "Age: $data->{age}\n"; print "Is Student: $data->{is_student}\n";

在这个示例中,我们首先引入JSON模块,然后使用decode_json函数将JSON格式的字符串解析为Perl数据结构。最后,我们输出了解析后的数据中的一些字段值。

结语

Perl作为一种强大的编程语言,拥有丰富的模块和工具,可以轻松地处理各种数据格式,包括JSON。通过合适的模块和方法,我们可以高效地解析和处理JSON数据,为我们的程序增添更多功能和灵活性。

希望本篇文章对你在Perl中解析JSON数据有所帮助!

十、perl的命名规范?

1 命名规则

1.1 文件命名

文件名称统一用英文字母(大小写)、数字和下划线的组合,长度一般不超过20个字符,文件命名体现功能的含义,正式发布版本不能加入作者信息。Perl Scripts 文件的扩展名必须是".pl",Perl Module文件的扩展名必须是".pm"。

正确:

lucent_file_parser.pl

不是:

lucent_file.p

1.2 标识符

采用语法模板来定义标识符的名字,命名必须有一定的实际意义,由英文字母组成,中间可以根据语义的连续性,使用下划线连接。

1.2.1 变量

局部变量必须由小写字母和下划线组成,常量名必须由大写字母和下划线组成。由多个单词组成的名字里,使用下划线"_"把多个单词分开。全局变量以’g_’开头,其余部分的命名规则和局部变量相同。每个全局变量必须有注释说明其作用。

正确:

my $next_node;

不是:

my $node;

1.2.2 包和类

包、类的命名采用大小写混合、首字母大写的方法。

正确:

IO::Controller

1.2.3 标识符缩写

标识符缩写时要保留单词的开始字母,不是辅音字母的简写。

正确:

use List::Util qw( max );

DESC:

for my $desc (@orig_strs) {

my $len = length($desc);

next DESC if ($len > $UPPER_LIM);

$max_len = max($max_len, $len);

}

不是:

use List::Util qw( max );

DSCN:

for my $dscn (@rgnl_strgs) {

my $lngh = length $dscn;

next DSCN if $lngh > $UPPR_LMT;

$mx_lngh = max($mx_lngh, $lngh);

}

1.2.4 函数

由小写字母、下划线组成。

正确:

sub max

{

……

}

sub get_msc_name

{

……

}

不是:

sub getMscName

{

……

}

1.3 布尔类型

boolean类型的变量,或返回boolean类型的值的函数,在命名时要反映其属性,必须用is或者has开头。

正确:

sub is_valid;

sub is_metadata_available_for;

sub has_end_tag;

my $has_loading_finished;

my $has_found_bad_record;

# and later...

if (is_valid($next_record) && !$has_loading_finished) {

METADATA:

while (is_metadata_available_for($next_record)) {

push @metadata, get_metadata_for($next_record);

last METADATA if (has_end_tag($next_record));

}

}

else {

$has_found_bad_record = 1;

}

1.4 数组和哈希

数组类型的变量采用复数,hash类型的变量采用单数。要用undef显式释放变量空间。

正确:

my %option;

my %title_of;

my %count_for;

my %is_available;

# and later...

if ($option{'count_all'} && $title_of{$next_book} =~ m/$target/xms) {

$count_for{$next_book}++;

$is_available{$next_book} = 1;

}

my @events;

my @handlers;

my @unknowns;

# and later...

for my $event (@events) {

push @unknowns, grep { ! $_->handle($event) } @handlers;

}

print map { $_->err_msg } @unknowns;

2 注释

所有注释可用英文或中文书写,尽量使用英文注释。保持注释和代码的完全一致,修改程序时,必须修改相应的注释。注释的行数一般应在程序总行数的1/5到1/3。禁止出现错别字。注释应该语义明确,避免出现二义性。

2.1 文件头部注释

每个含有源代码的文件必须在文件开始有关于该文件的介绍性注释。其中列出文件名、创建者、创建日期、功能描述、版本信息、版权声明;如果对文件进行了修改,应该在文件头中说明修改人、修改日期、修改原因,并变更文件的版本信息,最新版本信息放到最前面。

格式为:

#*********************************************************

# FileName: lucent_file_parser.pl

# Creator: Phonix <phonix@gmail.com.cn>

# Create Time: 2006-01-09

# Description: This is the proof-of-concept code for the

# Windows denial-of-serice attack described by

# the Razor team (NTBugtraq, 19-May-00).

# CopyRight: Copyright © Bright Ocean Inter-Telecomm,All rights reserved.

# Revision: V1.0.0

# ModifyList:

# Revision: V1.1.1

# Modifier: Phonix

# ModifyTime: 2006-01-17

# ModifyReason: fix the bug of ……

#

# Revision: V1.1.0

# Modifier: Phonix

# ModifyTime: 2006-01-16

# ModifyReason: add mysql&oracle db support

#*********************************************************

不是简单的:

#========================================

#Created By:Phonix

#Created Time: 2006-01-09

#Modified Time: 2006-01-17

#========================================

2.2 文件中注释

建议在文件中标识出修改部分的起止位置。

正确:

# add mysql&oracle db support begin

……

# add mysql&oracle db support end

2.3 函数注释

在每个函数前必须写描述性注释。说明这个函数的功能、参数和函数的返回值。

格式为:

#*******************************************************************

# Function Name: calc_time($datetime, $delta)

# Description: This function calculate the new datetime.

# Parameters:

# 1. $datetime is the base time, taking the format of 'yyyy-mm-dd hh:mm:ss'

# 2. $delta is the time which should be add to the $datetime. A positive value increase the time

# while the negative vale decrease the time

# Return:

# A new time string is returned, also taking the format of 'yyyy-mm-dd hh:mm:ss'

#*********************************************************************

不是简单的:

##########################################

#function name : get_ldap

#desc : get config info from ldap server

##########################################

2.4 程序块注释

程序块注释用于说明程序中的关键算法、使用某种技巧的代码以及修改、测试、阅读时必须加以注意的代码。

格式为:

#*********************************************************************

#注释内容

#......

#......

#********************************************************************

2.5 语句注释

用于对特定程序语句进行说明,建议采取在语句行末尾说明的方法,同时注释换行后也要对齐。格式为:

my @names = (

'Damian', # Primary key

# the key is

'Matthew', # Disambiguator

'Conway', # General class or category

);

3 代码布局

3.1 括号

建议括号、插入语可以采用两种方式之一,但是在一个程序里选定那种方式之后,那么要至始至终保持一致。

3.1.1 方式一

采用K&R风格。

格式为:

my @names = (

'Damian', # Primary key

'Matthew', # Disambiguator

'Conway', # General class or category

);

for my $name (@names) {

for my $word ( anagrams_of(lc $name) ) {

print "$word\n";

}

}

3.1.2 方式二

括号对{}对必须位于同一列,独占一行,并且和{}之外的语句行对齐

my @names =

(

'Damian', # Primary key

'Matthew', # Disambiguator

'Conway', # General class or category

);

for my $name (@names)

{

for my $word (anagrams_of(lc $name))

{

print "$word\n";

}

}

3.2 关键字

把关键字和其他的内容分开,关键字if, while, for,else…后面必须接一个空格。if和while语句必须使用’{‘和’}’括起语句体,即使只有一行代码。建议不使用单行的if语句。

正确:

for my $result (@results) {

print_sep( );

print $result;

}

while ($min < $max) {

my $try = ($max - $min) / 2;

if ($value[$try] < $target) {

$max = $try;

}

else {

$min = $try;

}

}

if ($condition){

$i++;

}

不是:

for(@results) {

print_sep( );

print;

}

while($min < $max) {

my $try = ($max - $min) / 2;

if($value[$try] < $target) {

$max = $try;

}

else{

$min = $try;

}

}

if($condition) {$i++;}

3.3 子程序和变量

不要把子程序或变量和其后的括号部分分开。

正确:

my @candidates = get_candidates($marker);

CANDIDATE:

for my $i (0..$#candidates) {

next CANDIDATE if open_region($i);

$candidates[$i]

= $incumbent{ $candidates[$i]{region} };

}

不是:

my @candidates = get_candidates ($marker);

CANDIDATE:

for my $i (0..$#candidates) {

next CANDIDATE if open_region ($i);

$candidates [$i]

= $incumbent {$candidates [$i] {region}};

}

3.4 代码缩排

缩进采用四个空格,或一个TAB(1 TAB 设置成四个空格)。

3.5 代码块

不要把两句话放在一行,每行只能写一个语句。

正确:

while (my $record = <$inventory_file>) {

chomp $record;

next RECORD if $record eq $EMPTY_STR;

my @fields = split $FIELD_SEPARATOR, $record;

update_sales(\@fields);

$count++;

}

不是:

while (my $record = <$inventory_file>) {

chomp $record; next RECORD if $record eq $EMPTY_STR;

my @fields = split $FIELD_SEPARATOR, $record; update_sales(\@fields);$count++;

}

3.6 代码长度

每个函数体的语句行不能超过100行(不包括注释,一个分号算一行)。每行长度不要超过78个字符,超过该长度时,必须考虑换行,从低优先级的操作符处分割长表达式, 在赋值符前断开长的语句。

正确:

push (@steps, $steps[-1]

+ $radial_velocity * $elapsed_time

+ $orbital_velocity * ($phase + $phase_shift)

- $DRAG_COEFF * $altitude);

$predicted_val = $average + $predicted_change * $fudge_factor;

不是:

push (@steps, $steps[-1] + $radial_velocity

* $elapsed_time + $orbital_velocity

* ($phase + $phase_shift) - $DRAG_COEFF

* $altitude);

$predicted_val = $average

+ $predicted_change * $fudge_factor;

3.7 操作符

二元运算符(算术运算符, 赋值运算符等)的两边都要接空格,低级操作符(如:+-)两边各有两个空格,高级操作符(如:*%)两边各有一个空格。

在运算符'->'两边不要使用空格,在一元操作符和操作数两边不要使用空格。

可以使用括号来表示运算的先后顺序。

正确:

my $displacement

= $initial_velocity * $time + 0.5 * $acceleration * $time**2;

my $price

= $coupon_paid * $exp_rate + ($face_val + $coupon_paid) * $exp_rate**2;

不是:

my $displacement=$initial_velocity*$time+0.5*$acceleration*$time**2;

my $price=$coupon_paid*$exp_rate+(($face_val+$coupon_val)*$exp_rate**2);

3.8 语句结束符

在每个语句后边要填加分号。

正确:

while (my $line = <>) {

chomp $line;

if ( $line =~ s{\A (\s*) -- (.*)}{$1#$2}xms ) {

push @comments, $2;

}

print $line;

}

3.9 代码排列

数组或Hash的赋值采用垂直排列。

正确:

my @months = qw(

January February March

April May June

July August September

October November December

);

my %expansion_of = (

q{it's} => q{it is},

q{we're} => q{we are},

q{didn't} => q{did not},

q{must've} => q{must have},

q{I'll} => q{I will},

);

不是:

my @months = qw(

January February March April May June July August September

October November December

);

my %expansion_of = (

q{it's} => q{it is}, q{we're} => q{we are}, q{didn't} => q{did not},

q{must've} => q{must have}, q{I'll} => q{I will},

);

3.10 非末端表达式

采用中间变量代替长表达式。

正确:

my $next_step = $steps[-1]

+ $radial_velocity * $elapsed_time

+ $orbital_velocity * ($phase + $phase_shift)

- $DRAG_COEFF * $altitude

;

add_step( \@steps, $next_step, $elapsed_time);

不是:

add_step( \@steps, $steps[-1]

+ $radial_velocity * $elapsed_time

+ $orbital_velocity * ($phase + $phase_shift)

- $DRAG_COEFF * $altitude

, $elapsed_time);

3.11 功能块顺序

在每个Perl Scripts中,每个功能块之间必须有一个空行。主程序为main()函数,功能块出现顺序如下:

use modules;

global variable 定义

main定义

sub routine 定义

4 数值和表达式

4.1 字符串界定符

需要用变量替换的字符串用双引号,否则用单引号。

正确:

my $spam_name = "$title $first_name $surname";

my $pay_rate = "$minimal for maximal work";

my $spam_name = 'Dr Lawrence Mwalle';

my $pay_rate = '$minimal for maximal work';

4.2 常量

使用字符常量,而不要直接用数值。

正确:

use Readonly;

Readonly my $MOLYBDENUM_ATOMIC_NUMBER => 42;

# and later...

print $count * $MOLYBDENUM_ATOMIC_NUMBER;

不是:

print $count * 42;

4.3 字符串

4.3.1 两行

对于两行的字符串,要用“.”进行连接。

正确:

$usage = "Usage: $0 <file> [-full]\n"

. "(Use -full option for full dump)\n";

不是:

$usage = "Usage: $0 <file> [-full]

(Use -full option for full dump)";

4.3.2 多于两行

对于多于两行,要采用如下格式:

正确:

$usage = <<"END_USAGE";

Usage: $0 <file> [-full] [-o] [-beans]

Options:

-full : produce a full dump

-o : dump in octal

-beans : source is Java

END_USAGE

不是:

$usage = "Usage: $0 <file> [-full] [-o] [-beans]\n"

. "Options:\n"

. " -full : produce a full dump\n"

. " -o : dump in octal\n"

. " -beans : source is Java\n"

;

4.4 哈希变量

Hash变量的定义采用双箭头(=>)方式。

正确:

%default_service_record = (

name=> '<unknown>',

rank=> 'Recruit',

serial=> undef,

unit=> ['Training platoon'],

duty=> ['Basic training'],

);

不是:

%default_service_record = (

'name', '<unknown>',

'rank', 'Recruit',

'serial', undef,

'unit', ['Training platoon'],

'duty', ['Basic training'],

);

5 函数

5.1 调用语法

调用时要使用圆括号,不管是否有参数。

正确:

fix();

coerce($input, $INTEGER, $ROUND_ZERO);

不是:

fix;

5.2 函数返回

在函数中要进行显式的return返回。

正确:

sub set_terseness {

my ($terseness) = @_;

my $default_terseness = $terseness;

return; # Explicitly return nothing meaningful

}

不是:

sub set_terseness {

my ($terseness) = @_;

my $default_terseness = $terseness;

}

6 编程惯例

6.1 使用use strict

所有Perl Scripts 文件中必须在开始使用“use strict;”,进行严格的语法检查,便于查找错误。

6.2 避免使用内部变量名称

避免使用Perl内部变量。使用“use English;”装入Perl内部变量的符号名称。使用my来限定变量的作用域。下面是一些Perl内部变量名称的对应关系。

$_ $ARG

@_ @ARG

$! $ERRNO

$? $CHILD_ERROR

$$ $PID

$0 $PROGRAM_NAME

$. $INPUT_LINE_NUMBER

$| $OUTPUT_AUTOFLUSH

$@ $EVEL_ERROR

$& $MATCH

$` $PREMATCH

$' $POSTMATCH

$+ $LAST_PAREN_MATCH

$/ $RS

$\ $ORS

$< $UID

$> $EUID

$( $GID

$) $EGID

$] $PERL_VERSION

$? $CHILD_ERROR

6.3 避免使用goto

避免使用goto语句(只有在从多重循环的内部跳出时才可以使用)。除非能够特别有效的增加程序的效率并且不影响程序良好结构的特殊情况。

6.4 语法检查(辅助工具)

使用-cw选项检查Perl程序的语法。

正确:

perl -cw -Mdiagnostics file.pl # check syntax with warnings on

nt; # Perl 5.004_04, define constants

use Env; # instead of $ENV{'HOME'}; Shortens the usage, but do not

# mix normal variables

# with environment variables.

6.5 use Carp; # For modules: 使用标准模块

尽量使用标准库函数、公共函数和开发库中已有的函数和模块,使用FileHandle模块来处理文件的读写。尽量使用以下的标准Perl模块:

use strict; # helps you to locate syntax errors or uncertainties.

use integer; # if you don't need floating point math,it will speed Perl up.

use constagives you `carp' and `croak'

use English; # gives symbolic names, like $! ==> $ERRNO

use Getopt::Long; # --posix command line option handling

use Cwd; # platform independent cwd()

use File::Basename; # don't invent your own wheel of this.

use File::Find; # don't use system("find . -name ...")...

use File::copy; # don't use system("cp this that");

use File::patch; # instead of system("mkdir");

use File::stat; # readable: $st = stat($file), $st->mode

use DirHandle; # OO form of `readdir'

use Text::Tabs # un/expand tabs in text

use Text::ParseWords; # Parse text into tokens, understands embedded

# quotes. @a = "ewords("[ +]", 0, $_);

# a+b, "a b" + c

use Socket; # socket handling

use Sys::Hostname; # don't invent your own wheel

use Net::Ping # unix ping, check if host is online

use Time::Local # time manipulations

6.6 其他

1、编码、测试、注释,是程序员的三项基本工作,它们是同等重要的。

2、可靠性第一,可读性第二,效率第三。只有在极个别必须强调效率的部分,可以是可靠性第一,效率第二,可读性第三。

3、首先是正确,其次是优美。

4、无法证明你的程序没有错误。因此,在新编写完一段程序后,应该测试通过后再继续编码。

5、改正一个错误的同时,可能会引起新的错误。因此,在修改bug前,首先考虑对其他程序的影响。修改后,应该对程序进行完整的测试,而不是只对修改部分进行测试。

6、避免使用很多个参数的函数。

7、函数应该只有一个出口。

8、循环应该只有一个出口,避免多个出口。

9、尽量避免使用全局变量。

10、在尽可能小的作用域内定义和使用变量。

11、使用括号,表达复杂表达式中的操作符的优先顺序。

12、循环、分支不要超过五个层次。

13、循环、分支等语句后,即使只有一行代码时,也要使用{}将其括起来。

14、禁止else goto和else return。

15、重复使用的、完成相对独立功能的算法、代码,应该抽象为公共模块。