perl简单语法文档格式.docx
- 文档编号:18804191
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:17
- 大小:26.65KB
perl简单语法文档格式.docx
《perl简单语法文档格式.docx》由会员分享,可在线阅读,更多相关《perl简单语法文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
print$_;
如果在命令行输入$perlread.plread.pl。
这个程序将在屏幕上打印出文件read.pl的每一行。
在前面的例子中我们已经看见,Perl语言中向标准输出输出数据可以用print语句。
我们在print语句中可以输出多个变量,变量之间用"
"
分隔开来。
如下面的例子:
print3,45*2,"
hello"
2+2;
上面的输出语句将给出"
390hello4"
的输出结果。
除了print语句以外,Perl中还提供了一个printf语句用于标准输出,不过printf更接近于C语言的printf函数,可以进行格式化的输出,如:
printf"
%10s%8d%8.2f\n"
$a,$b,$c;
printf("
$a,$b,$c);
#加上括号的C语言写法也是可以的。
另外print和printf在输出数组变量的时候也是不同的,如下例:
@a=(1,2,3);
printf@a;
print"
\n"
print@a;
输出的结果是:
1
123
如果在@a两边加上"
"
,则输出就都是123了。
7.2
分支循环控制结构
if语法
Perl语言的if...then...else...语句结构和C语言非常相似,该结构一共有三种变种,分别如下:
if语法1:
if(判别运算式)
{
表达式为真时的语句块;
}
或写成:
表达式为真时的语句if(判别运算式);
实例为:
您的分数及格了!
if($score>
=60);
if语法2:
if(判别运算式一){
判别式一为真时的语句块;
}else{
判别式一为假时的语句块;
if语法3:
if(判别运算式一)
}elsif(判别运算式二){
判别式二为真时的语句块;
}elsif(判别运算式三){
判别式三为真时的语句块;
所有判别式为假时的语句块;
unless语法
unless的含义就是说“如果判别式不为真,就执行...”。
unless语法1:
unless(判别运算式){
判别式为假时语句块;
或写为:
判别式为假时语句unless(判别运算式);
unless语法2:
unless(判别运算式)
{
判别式为真时语句块;
进阶技巧:
&
、"
||"
及"
?
:
这些符号看上去像标点符号,或是表达式的一部分。
和C语言中一样,他们在Perl语言中也可作为控制结构,而且更简洁,只是可读性差了很多。
比如说:
if(判别表达式) {为真时语句块};
也可以写为:
判别表达式&
为真时的语句块
同样道理,unless(this){that}可替换为this||that。
则可以这样使用:
exp1?
exp2:
exp3
这个式子表示:
如果exp1为真则求exp2的值,否则求exp3的值。
while循环语法
Perl语言中while,do...while,for,until,foreach均可以用于实现循环结构,循环中还可以用last,next,redo等操作符进行控制。
下面我们先介绍while语法。
while(判别运算式){
程序叙述区块;
上个语法在Perl中也可以写成:
程序叙述区块while(判别运算式);
do...while循环语法
do
}while(判别运算式);
在while和dowhile循环最大的区别是在dowhile循环中,循环体至少会被执行一次。
until循环语法
until(判别运算式)
程序叙述区块;
程序叙述区块until(判别运算式);
do...until循环语法
do{
}until(判别运算式);
for循环语法
for(初始化运算式;
判别运算式;
循环过程运算式)
或者
for$variable(@array)
第二个语法中如果把$variable变量省略的话,就会将数组@array的元素一个一个指定给$_这个变量,这是比较精简的写法。
其中第一个语法更接近于C语言的语法。
foreach循环语法
foreach$variable(@array)
如果把$variable变量省略的话,就会将数组@array的元素一一指定给$_这个内定的输出变量.
last退出循环语法
范例:
for($i=1;
$i<
=10;
$i++)
lastif($i==5);
#如果$i等于5的话就退出for循环
print"
$i\n"
next继续循环语法
for($i<
#如果是2的倍数的话,就到循环的下一个陈述
nextif($i%2)==0)
print"
$i是一个奇数!
7.3
函数
Perl语言中有两种函数,一种是Perl自带的一些实用系统函数,如文件打开函数open等;
另一种是用户自定义的函数,用户通过自己定义函数可以使得程序的结构化更加清晰。
用户函数又称子程序(Subroutine),在Perl中用下面的结构来定义用户函数:
sub子程序名{
语句块;
}
这里的子程序名与变量的取名规则类似。
与BASH程序不同,Perl中的用户函数的定义可以位于程序的任何位置,比如说放在文件的未尾,而并不需要放在调用该函数的代码之前。
如果两个子程序使用了相同的程序名,位置靠后的子程序将覆盖前面子程序。
需要注意的是用户函数中的变量默认为全局变量,并不是像C语言中那样是局部变量,Perl函数中的变量可以被其他程序段共享。
如果希望定义局部变量,可以用下面两种方法来实现:
local($a);
my$a;
另外用户函数的调用:
通过在子程序前加“&
”符号才可以,函数可在任一表达式内被调用。
函数调用可以嵌套,即子程序中可以再调用另外的子程序,即可以程序员可以用Perl写出具有递归特性的代码。
调用用户函数产生的结果称为返回值(returnvalue)。
返回值是每次函数被执行时,最后一个被执行到的表达式的计算结果。
如:
subadd_a_b{
$a+$b;
函数最后一条表达式为$a+$b,故返回值为$a+$b的计算结果。
以下是调用情况:
$a=5;
$b=6;
$c=&
add_a_b;
#$c的值为11
$d=5*&
#$d的值为5*11,即55
还有一个问题是,在Perl程序中如何向函数中传递参数呢?
这是可以实现的,调用函数时,可以将参数依次放在函数名后面的"
()"
中,而在函数体中,系统默认数组@_中就按同样顺序存放着所有的参数。
我们可以访问@_变量,从而确定参数的个数及其数值。
仍以加法函数为例:
$_[0]+$_[1];
$c=&
add_a_b(5,6);
#$c的值为11
$d=5*&
add_a_b(2,3);
#d的值为5*5即25
更为奇特的是,这种方式可以实现变参数传递,即参数个数不确定的传递。
C语言也可以实现这种传递,如我们熟悉的printf函数,只是他们的实现机制不太一样,C更深奥一些,此处就不多解释了。
subadd_all{
$sum=0;
#将sum初始化
foreach$_(@_){#遍历参数列表
$sum+=$_;
#累加每个元素
$sum;
#返回sum即总和的值
$a=&
add_all(3,4,5);
#$a的值为3+4+5即12
$d=2*&
add_all(1,2,3,4,5);
#d的值为2*15即30
7.4
常用系统调用
下面将介绍一些Perl自身提供的一些标准系统函数,这些函数包括:
print、printf、chop、split、keys、values、reverse、sort、length、substr、index、push、pop、unshift、shift、join、grep、hex、rand、localtime、die、open、close、pack、read、exit。
下面就来分别介绍他们。
指令:
语法:
printFilehandleLIST
说明:
这个Filehandle可以看作在I(INPUT)/O(OUTPUT)之间的一个桥梁,可以利用FILEHANDLE来做出数据读入写出的动作。
STDIN是代表从哪里输入数据,例如从电脑的键盘输入;
STDOUT是代表从哪里输出数据,例如从电脑的屏幕输出;
STDERR是代表从哪里输出错误的数据,例如从电脑的屏幕输出。
而在PERL语言中有三个标准FILEHANDLE:
1.STDIN(标准输入):
是代表STDIN的FILEHANDLE
2.STDOUT(标准输出):
是代表STDOUT的FILEHANDLE
3.STDERR(标准错误输出):
是代表STDERR的FILEHANDLE
如果要使用其他FILEHANDLE的时候,就要先用OPEN这个函数来打开一个FILEHANDLE,我们可以用PRINT这个函数将LIST中的数据输出给FILEHANDLE。
printLIST
如果省略Filehandle的话,就会把Filehandle默认为STDOUT。
也就是会将LIST的数据内容显示在终端屏幕上。
同时省略Filehandle和LIST的话,就会以STDOUT为Filehandle,并会输出$_这个系统内部变量的数据内容。
如果$_变量是一个空字符串的话,就会显示出一个空字符串。
printf
printfFilehandleLIST
在Perl语言中也提代C语言中printf的语法,用法和C语言中的用法一模一样。
如果把Filehandle省略的话,也一样会把STDOUT当成是默认的Filehandle。
示例:
printf("
chomod%d%s\n"
711"
cgi"
);
会将chmod711cgi加上换行显示于屏幕上。
chop语法:
chop($url)
把最后一个字符删除。
$url="
chop($url);
这时$url="
还可以简写成chop($url="
chop函数一般用于去掉从键盘读入数据中的最后一个换行符。
split
split(/pattern/,$text,limit)其中/pattern/是文字处理的模式,而limit是代表要分割的个数,一般可以省略。
用一个指定的文字处理模式来分割$text字符串。
$text="
Michael,Gevin,Mike"
@name=split(/,/,$text);
#这时@name=("
Michael"
Gevin"
Mike"
@name=split(/,/,$text,2);
在传送CGI应用程序数据的时候会先将数据编码,其中会将FORM中第个数据字段的数据内容用&
这个符号隔开,所以在解码的时候就要以"
这个符号为分割的字符,将每个数据字段分割出。
而数据字段的名称和这个数据字段的值是用=这个符号来隔开,如果想取得数据字段的名称和所对应的值的话,就用要"
="
这个符号来分割数据字段,
keys
keys(%array)
取出关联数组%ARRAY中全部的key。
%NAME=(1,"
mike"
2,"
michael"
@readkey=keys(%NAMES);
#这时@readkey=(1,2);
values
values(%array)
取出关联数组%ARRAY中全部的value。
%NAMES=(1,"
@readval=values(%NAMES);
#这时@readval=("
reverse
reverse(@array)
将数组@array中的元素由后到前重新排列。
@back=("
A"
B"
C"
D"
E"
@back=reverse(@back);
#这时@back=("
sort
sort(@array)
将数组中的元素由小到大排序,如果要由大到小排序的话,要加上reverse这个函数。
@abc=("
d"
b"
c"
a"
@abc=sort(@abc);
#这时@abc=("
@abc=(reversesort@abc);
#这时@abc=("
这个语法也可以写成@abc=(reversesort(@abc));
@number=(5,2,10);
@number=sort(@number);
#上面示例用sort函数来排序数值的时,会出差错,因此要用下面到下面这一句。
@number=(sort{$a<
=>
$b}@number);
#这时@number=(2,5,10);
length
length($string)
求出字符串$string的字节(bytes)值。
$string="
Perl5"
$size=length($string);
#这时$size=5;
substr
substr($string,offset,length)offset代表起始字符的位置,length代表引用的字符串长度,如果省略length则代表从起始值到字符串的最后一个字符长度。
而offset如果是负值的话,就会从字符串右边开始指定字符。
$s=substr("
perl5"
2,2);
#这时$s="
rl"
2);
rl5"
-2,2);
er"
index
index($string,$substring,position)$substring是要寻找的字符;
position代表从哪一个位置开始寻找,假如省略position就从头开始找起。
返回所要找寻的字符在一字符串$string中的位置,如果在字符串中找不到字符的话,则会返回-1这个值。
$s=index("
p"
#这时$s=0
l"
#这时$s=3
perl"
#这时$s=-1
push
push(@array,$string)
在数组@array的最后附加新的元素($string)到数组@array中。
@array=("
one"
two"
push(@array,"
three"
#这时@array=("
)
pop
pop(@array)
将数组(@array)的最后一个元素删除,并将删除的元素返回。
$rm=pop(@array);
而$rm="
unshift
unshift(@array,$string)
在数组@array的第一个元素前附加新的元素$string到数组@array中。
unshift(@array,"
shift
shift(@array)
将数组@array的第一个元素删除,并将删除的元素返回。
@rm=shift(@array);
join
join($string,@array)
在一数组@array的元素之间加上一指定的字符$string,并将结果返回。
$total=join("
:
@array);
这时$total="
one:
two:
grep
grep(/pattern/,@array)
将合文字处理模式(regularexpression)的数组元素找出来。
on"
in"
$count=grep(/on/,@array);
#这时$count=2
@result=grep(/on/,@array);
#这时@result=("
hex
hex($string)
将十六进制的数值转成十进制。
$decimal=hex("
ff"
这时$decimal=255;
rand
rand($interger)
常和函数srand搭配来取得一随机数,如果没有先宣告stand函数的话,则取出的常数值是一个固定值。
这个语法会返回一个介于0和$interger之间的数值,如果$interger省略的话,则会返回一个介于0和1的数值。
srand;
#要先调用一次srand函数,才能产生随机数的效果
$int=rand(10);
#$int的值会大于0而且小于10,如果希望产生的乱数是整数的话,就要再加上int这个函数,如下
$int=int(rand(10));
#$int的值是一个整数,且值在0和9之间
localtime
localtime(time)
可返回九个有关时间的元素,在写CGI应用程序的时候常会用到系统的时间,所以在此会详细介绍这个函数的用法。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
其中:
$sec代表秒数[0,59]、$min代表分数[0,59]、$hour代表小时数[0,23]、$mday代表是在这个月的第几天[1,31]、$mon代表月数[0,11]因此要将$mon加1之后,才能符合实际情况、$year从1990年算起的年数、$wday从星期六算起,代表是在这周中的第几天[0-6]、$yday从一月一日算起,代表是在这年中的第几天[0,366]、$isdst只是一个flag知道这些变量之后,就可以在CGI应用程序中拿来应用了。
此外,也可以用下面这一行指令在UNIX系统下取得系统的时间。
为了避免错误发生,最好用绝对路径的方法来取得系统时间,如果绝对路径不清楚的话可以用"
whichdata"
这个指令来得知。
$data='
/usr/bin/data'
而在Perl5版本中,也可以用下面这一行指令来取得系统时间。
$data=localtime(time);
die
dieLIST
会把LIST字符串显示出来,并退出程序。
常常和$!
这个代表错误信息变量一起使用。
open(FILE,"
$filename"
)||die"
不能打开文件$!
\n;
#如果打开文件失败的话,就会显示出错误的信息,之后再退出程序。
open
语法1:
open(filehandle,"
)其中$filename是一个指定打开的文件名。
这是一个很常用的函数,可用于文件的打开(readonly)。
$filename="
usr/abc.txt"
)||die"
不能打开文件$filename\n;
#将&
ltfile>
数据指定给纯变量$line(一行一行地)
while($line=<
FILE>
)
print"
$line"
close(f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- perl 简单 语法
![提示](https://static.bdocx.com/images/bang_tan.gif)