当前位置:   article > 正文

Linux工具应用_PERL

Linux工具应用_PERL

1. Introduction

Perl,一种功能丰富的计算机程序语言,运行在超过100种计算机平台上,适用广泛,从大型机到便携设备,从快速原型创建到大规模可扩展开发。

Perl 语言的应用范围很广,除CGI以外,Perl被用于图形编程、系统管理、网络编程、金融、生物以及其他领域。由于其灵活性,Perl被称为脚本语言中的瑞士军刀。


SO, 什么是 Perl?

Perl是由Larry Wall设计的,并由他不断更新和维护的编程语言。

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

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

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

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


Perl 优点

  • 相比C、Pascal这样的"高级"语言而言,Perl语言直接提供泛型变量、动态数组、Hash表等更加便捷的编程元素。
  • Perl具有动态语言的强大灵活的特性,并且还从C/C++、Basic、Pascal等语言中分别借鉴了语法规则,从而提供了许多冗余语法。
  • 在统一变量类型和掩盖运算细节方面,Perl做得比其他高级语言(如:Python)更为出色。
  • 由于从其他语言大量借鉴了语法,使得从其他编程语言转到Perl语言的程序员可以迅速上手写程序并完成任务,这使得Perl语言是一门容易用的语言。
  • Perl 是可扩展的,我们可以通过CPAN("the Comprehensive Perl Archive Network"全面的 Perl 存档网络)中心仓库找到很多我们需要的模块。
  • Perl 的 mod_perl 的模块允许 Apache web 服务器使用 Perl 解释器。

Perl 缺点

也正是因为Perl的灵活性和"过度"的冗余语法,也因此获得了仅写(write-only)的"美誉",因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。

同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。

建议的解决方法是在程序里使用use strict,以及use warnings。并统一代码风格,使用库,而不是自己使用"硬编码"。Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。

很多时候,perl.exe进程会占用很多的内存空间,虽然只是一时,但是感觉不好。

2. 语法

2.1 基础语法

Perl 程序由声明与语句组成,程序自上而下执行,包含了循环,条件控制,每个语句以分号 ; 结束。

Perl 语言没有严格的格式规范,你可以根据自己喜欢的风格来缩进(和python不一样)。

2.1.1 第一个perl程序

交互式编程(命令行执行语句):
$ perl -e 'print "Hello World\n"'
脚本编程
下面内容在hw.pl文档中编写。

#!/usr/bin/perl
# 输出 "Hello, World"
print "Hello, world\n";
  • 1
  • 2
  • 3

代码中 /usr/bin/perl 是 perl 解释器的路径。和tcl脚本一样,如果想直接用./hw.pl命令执行,需要:

  • 给脚本可执行权限:chmod 0755 hw.pl
  • 添加脚本所在路径到环境变量:/etc/profile下添加:export PATH=$PATH:file_path

print 也可以使用括号来输出字符串,以下两个语句输出相同的结果:

print("Hello, world\n");
print "Hello, world\n";
  • 1
  • 2

2.1.2 注释

#!/usr/bin/perl
 
# 这是一个单行注释
print "Hello, world\n";
 
=pod 注释
这是一个多行注释
这是一个多行注释
这是一个多行注释
这是一个多行注释
=cut
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

需要注意:

  • =pod、 =cut只能在行首。
  • 以=开头,以=cut结尾。
  • 后面要紧接一个字符,=cut后面可以不用。

2.1.3 Perl 中的空白

Perl 解释器不会关心有多少个空白,以下程序也能正常运行:
实例

#!/usr/bin/perl
print       "Hello, world\n";
  • 1
  • 2

执行以上程序,输出结果为:Hello, world

但是如果空格和分行出现在字符串内,他会原样输出:
实例

#!/usr/bin/perl
#会输出分行
print "Hello
          world\n";
  • 1
  • 2
  • 3
  • 4

执行以上程序,输出结果为:

Hello
          world
  • 1
  • 2

总结:
所有类型的空白如:空格,tab ,空行等如果在引号外解释器会忽略它,如果在引号内会原样输出。

2.1.4 单引号和双引号

perl 输出字符串可以使用单引号和双引号,如下所示:
实例

#!/usr/bin/perl
print "Hello, world\n";    # 双引号
print 'Hello, world\n';    # 单引号
  • 1
  • 2
  • 3

输出结果如下:

Hello, world
Hello, world\n
  • 1
  • 2

从结果中我们可以看出,双引号 \n 输出了换行,而单引号没有。

Perl双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。

2.1.5 Here 文档

Here文档又称作heredoc、hereis、here-字串或here-脚本,是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字串的方法。

使用概述:

1、必须后接分号,否则编译通不过。
2、EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
3、结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
4、开始标识可以不带引号号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
5、当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与 q 和 qq 的用法。
  • 1
  • 2
  • 3
  • 4
  • 5

实例

#!/usr/bin/perl
$a = 10;
$var = <<"EOF";
这是一个 Here 文档实例,使用双引号。
可以在这输入字符串和变量。
例如:a = $a
EOF
print "$var\n";
 
$var = <<'EOF';
这是一个 Here 文档实例,使用单引号。
例如:a = $a
EOF
print "$var\n";
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

执行以上程序输出结果为:

这是一个 Here 文档实例,使用双引号。
可以在这输入字符串和变量。
例如:a = 10

这是一个 Here 文档实例,使用单引号。
例如:a = $a
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

从上面的例子可以看出,本质上EOF就代表了被$var = <<"EOF";EOF包起来的字符串!
还可以看到用双引号包着的EOF和单引号的区别:单引号的字符串中$a无法被转义识别,直接输出字符。

2.1.6 转义字符

如果我们需要输出一个特殊的字符,可以使用反斜线(\)来转义,例如输出美元符号($):
实例

#!/usr/bin/perl
$result = "say \"hello world\""<
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/843743
推荐阅读
相关标签
  

闽ICP备14008679号