perl相关知识

时间:2021-10-05 23:13:13

转:http://www.runoob.com/perl/perl-cgi-programming.html

Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 "实用报表提取语言"。

Perl 最重要的特性是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。

Perl 的 mod_perl 的模块允许 Apache web 服务器使用 Perl 解释器。

----

$x=$ENV{'y'} if (-f $ENV{'y'});//如果ENV{'y'}文件存在,则赋值。
$x= a||'y';//如果a不为空,则赋值'y'.||是或者的关系,字符串连接用.
$_//默认输入和模式匹配内容

perl -wc a.pl//测试perl语法。

----

Perl 缺点

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

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

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

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

$ perl -v//查看安装版本

交互式编程

你可以在命令行中使用 -e 选项来输入语句来执行代码,实例如下:

$ perl -e 'print "Hello World\n"'

输入以上命令,回车后,输出结果为:

Hello World

脚本式编程

我们将以下代码放到 hello.pl 文件中:

实例

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

代码中 /usr/bin/perl 是 perl 解释器的路径。在执行该脚本前要先确保文件有可执行权限,我们可以先将文件权限修改为 0755 :

$ chmod 0755 hello.pl
$ ./hello.pl
Hello, world # 输出结果 使用#注释,=多行注释 变量
$myfirst=123;     #数字123 变量定义,用时在变量的名字前面加上一个"$",表示是标量
@arr=(1,2,3)#数组定义,数组变量以字符"@"开头,索引从0开始
%h=('a'=>1,'b'=>2);#哈希变量以字符"%"开头。


函数定义及参数传递:
向子程序传递参数

Perl 子程序可以和其他编程一样接受多个参数,子程序参数使用特殊数组 @_ 标明。

因此子程序第一个参数为 $_[0], 第二个参数为 $_[1], 以此类推。

不论参数是标量型还是数组型的,用户把参数传给子程序时,perl默认按引用的方式调用它们。

实例

#!/usr/bin/perl

# 定义求平均值函数
sub Average{
# 获取所有传入的参数
$n = scalar(@_);
$sum = ; foreach $item (@_){
$sum += $item;
}
$average = $sum / $n;
print '传入的参数为 : ',"@_\n"; # 打印整个数组
print "第一个参数值为 : $_[0]\n"; # 打印第一个参数
print "传入参数的平均值为 : $average\n"; # 打印平均值
} # 调用函数
Average(, , );

子程序返回值

子程序可以向其他编程语言一样使用 return 语句来返回函数值。

如果没有使用 return 语句,则子程序的最后一行语句将作为返回值。

子程序的私有变量

默认情况下,Perl 中所有的变量都是全局变量,这就是说变量在程序的任何地方都可以调用。

如果我们需要设置私有变量,可以使用 my 操作符来设置。

my 操作符用于创建词法作用域变量,通过 my 创建的变量,存活于声明开始的地方,直到闭合作用域的结尾。

闭合作用域指的可以是一对花括号中的区域,可以是一个文件,也可以是一个 if, while, for, foreach, eval字符串。

变量的临时赋值

我们可以使用 local 为全局变量提供临时的值,在退出作用域后将原来的值还回去。

local 定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中。

静态变量

state操作符功能类似于C里面的static修饰符,state关键字将局部变量变得持久。

Perl 特殊变量

Perl 语言中定义了一些特殊的变量,通常以 $, @, 或 % 作为前缀,例如:$_。

很多特殊的变量有一个很长的英文名,操作系统变量 $! 可以写为 $OS_ERROR。

如果你想使用英文名的特殊变量需要在程序头部添加 use English;。这样就可以使用具有描述性的英文特殊变量。

最常用的特殊变量为 $_,该变量包含了默认输入和模式匹配内容。实例如下:

实例

#!/usr/bin/perl foreach ('Google','Runoob','Taobao') { print $_; print "\n"; }

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

Google
Runoob
Taobao

以下实例我们不使用 $_ 来输出内容:

实例

#!/usr/bin/perl foreach ('Google','Runoob','Taobao') { print; print "\n"; }

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

Google
Runoob
Taobao

实例中,首先输出 "Google" ,接着输出 "Runoob" ,最后输出 "Taobao" 。

在迭代循环中,当前循环的字符串会放在 $_ 中, 然后 通过 print 输出。另外 print 在不指定输出变量,默认情况下使用的也是 $_。