Perl 语法和结构
脚本文件:
Perl 脚本可通过文本编辑器来创建。一般情况下,用户无需为脚本提供特别的文件扩展名,除非执行该脚本的应用程序要求提供。譬如,如果是作为Apache 容器中的cgi程序来执行的话,就必须为脚本文件名提供.pl 或.cgi扩展名
自由格式:
Perl是一种格式自由的语言。一个Perl 语言必须由一个分号结尾,但它可以出现在程序的任意位置,亦可拆分为多行内容
注释:
Perl 中的注释由 # 开头。解释器会在执行程序时自动忽略注释。注释可以出现在任何位置,但不能拆分成多行内容
EXAMPLE
print "Hello, world"; # This is a comment
# Also a comment
打印输出:
print 和 printf 是Perl 的两个内建函数,用于显示输出内容。print 函数的参数是一系列由逗号隔开的字符串或数字。printf函数则类似于 C 语言中 printf() 函数,它能够归整输出内容的格式。用户无需再其参数两边提供括号。
print value, value, value ;
printf ( string format [ , mixed args [ , mixed ... ]] );
EXAMPLE
print "Hello, world\n";
print "Hello," "world\n";
print ("It's such a perfect day! \n"); # Parens optional;
print "The date and time are:", localtime, "\n";
printf("Meet %s%:Age 5d%:Salary \$10.2f\n", "John", 40, 55000);
数据类型/变量:
Perl 变量支持三种基本的数据类型: 标量、数组和关联数组(即散列Hash)
Perl 变量无需在使用前声明
变量名以一个特殊字符(funny letter)开头,后面跟有任意数目的字母,包括下划线。其中,特殊字符表明该变量的类型和上下文语境。位于特殊字符后面的字母都是大小写敏感的。如果变量是以字母开头的话,其后便可跟随任意数目的字母(下划线等同于一个字母)或 / 或数字;如果变量不是以字母开头的话,则后面只能跟有一个字母
标量:
标量是一种变量,只能保存单个值、单个字符串或单个数字。标量名必须以美元符号”$”开头。标量上下文则负责表明当前正在使用单个值的情况
EXAMPLE
$first_name = "Melanie";
$last_name = "Quigley";
$salary = 12500.00;
print $first_name, $last_name, $salary;
数组:
数组是一组有序排列的标量,如字符串和 / 或数字。 数组中的各个元素以“@” 符号开头
@names = ("Jessica", "Michelle", "Linda");
print "@names";#Prints the array with elements separated by a space
print "$names[0] and $names[2]";
print "$names[-1]\n";
$names[3] = "Nicole";
常用的内建函数:
- pop 移除最后一个元素
- push 把新元素添加到数组末尾
- shift 移除第一个元素
- unshift 把新元素添加到数组开头
- splice 在数组指定位置添加或移除数组元素
- sort 对数组元素进行排序
散列:
关联数组(associative array), 又称为散列(hash), 是一组未经排序的键 / 值对,并通过字符串进行索引。散列变量名以“%”号开头
EXAMPLE
%employee = (
"name" => "Jessica Savage",
"Phone" => "(925) 555-1274",
"Position" => "CEO"
);
print "$employee{"Name"}";
$employee{"SSN"} = "999-333-2345"; # assign a key/value
常用的内建函数
keys 检索散列数组中的所有键
values 检索散列数组中的所有值
each 检索散列数组中的某个键/值对
delete 删除某个键/值对
预定义变量:
符号 | 含义 |
---|---|
$_ | 在执行输入和模式搜索操作时使用的默认空格变量 |
$. | 文件中最后处理的当前行号 |
$@ | 当最近一个 eval()运算符提供的Perl语法报错信息 |
$! | 获取当前错误信息值, 常用于 die 命令 |
$0 | 含有正在执行的程序名 |
$$ | 正在执行本脚本的Perl进程号 |
$PERL_VERSION /S^V | Perl解释器的版本、子版本和修订版本信息 |
@ARGV | 含有命令行参数 |
ARGV | 一个特殊的文件句柄,用于遍历 @ARGV 中出现的所有文件名 |
@INC | 库文件的搜索路径 |
@_ | 在子例程中, @_ 变量含有传给该子例程的变量内容 |
%ENV | 关联数组型变量 %ENV 含有当前环境信息 |
%SIG | 关联数组型变量 %SIG 含有指向信号内容的句柄 |
常量(文本值):
固定不变的值,一旦设置就不能再更改。典型的常量包括 PI, 或一英里长度的英尺数。这些值都是从不变化的。 用户可借助 constant 保留
EXAMPLE
use constant BUFFER_SIZE => 4096;
use constant PI => 4 * atan2 1, 1;
use constant DEBUGGING => 0;
use constant ISBN => "0-13-028251-0";
PI = 6; # Cannot modify PI; produces an error.
数字:
Perl 支持整数 (十进制、八进制以及十六进制整数)、浮点数、科学计数法、布尔型(Boolean)以及null(空值)
EXAMPLE
$year = 2006; # integer
$mod = 0775; # octal number in base 8
$product_price = 29.95; # floating point number in base 10
$favorite_color = 0x33cc99; # integer in base 16 (hexadecimal)
$ distance_to_moon = 3.844e+5; # floating point in scientific notation
$bits = 0b101010110; # binary number
字符串和引号:
所谓字符串,是位于引号内的一组字节(字符)。
如果要用引号来标识字符串的话,必须保证这些引号是承兑出现的。here文档则是指一段嵌入于用户自定义标签中的文本块,其中第一个标签必须以<<开头。
单引号:'It rains in Spain';
双引号: "It rains in Spain";
Here 文档:
print <<END
It
rains in
END Spain
EXAMPLE
$question = 'He asked her if she wouldn\'t mind going to Spain';
# Single quotes
$answer = 'She said: "No, but it rains in Spain."'; # Single quotes
$line = "\tHe said he wouldn't take her to Spain\n";
$temperature = "78";
print "It is currently $temperature degrees";
# Prints: "It is currently 78 degrees.". Variables are
# Interpreted when enclosed in double quotes, but not
# single quotes
引用替换字符:
Perl 为引号结构提供了一种替换形式。 其中引用的字符串将通过费字母形式的字符予以分割,或由成对出现的字符包围起来,譬如()、{}、[]。
EXAMPLE
print qq/Hello\n/; # same as: print "Hello\n";
print q/He owes $5.00/, \n"; # same as: print 'He owes $5.00', "\n";
@states=qw( ME MT CA FL ); # same as ("ME", "MT", "CA","FL")
$today = qx(date); # same as $today = 'date';
运算符:
名称 | 符号 |
---|---|
赋值运算符 | = 、+=、 -= 、 *=、 %= 、 ^= 、 &=、 |
算术相等 | ==、!=、 <=> |
字符串相等 | eq、 ne、 cmp |
算术大小关系 | >、>=、 <、<= |
字符串大小关系 | gt、ge、lt、le |
范围运算符 | 5..10 # 范围是 5 至 10 之内,逐个递增 |
逻辑运算符 | &&、 and、 |
自动递增 / 递减 | ++、– |
文件运算符 | -r、 -w、 -x、 -o、 -e、 -z、 -s、 -f、 -d、 -l, 等等 |
位运算符 | ~、&、 |
字符串连接 | . |
字符串复制 | x |
代数运算符 | *、 /、 -、 +、 % |
模式匹配 | =~、 !~ |
EXAMPLE
print "\nArithmetic Operations\n";
print ((3+2) * (5-3)/2);
print "\nString Operators\n"; # Concatenation
print "\t Tommy". ' ' . "$avage";
print "\nComparison Operators \n";
print 5>=3, "\n";
print 47==23, "\n";
print "\nLogical Operators\n";
$a > $b && $b < 100
$answer eq "yes" || $money == 200
print "\nCombined Assignment Operators\n";
$a = 47;
$a += 3;
$a++;
print $a; # prints 51
print "\nPattern Matching Operators \n"
$color = "green";
print if $color =~ /^gr/;
$answer = "Yes";
print if $answer !~ /[Yy]/;
条件判断:
if 语句
if (表达式){
语句;
}
if/else 语句
if(表达式){
语句;
} else {
语句;
}
if/elsif语句
if(表达式){
语句;
} elsif(表达式){
语句;
} elsif(表达式){
语句;
} else {
语句;
}
条件运算符:
Perl 也为 if/else 语法结构提供了相应的简化模式,该模式拥有两个运算符和三个操作数(因此又称为三元运算符)。如果条件值为true,则执行紧跟在问号后面的语句;如果是false,则执行冒号后面的语句。格式:
(条件)?条件为true时执行的语句:条件为false时执行的语句
EXAMPLE
$coin_toss = int(rand(2)) + 1; # generate a random number between 1 and 2
print ($coin_toss == 1 ? "You tossed HEAD\n": "You tossed TALL\n");
循环:
循环结构能够指定一段重复执行多次的代码。Perl支持多种不同类型的循环: while 循环、 do - while 循环、 for 循环以及 foreach 循环。
while/until循环:
while (条件表达式) {
代码段A
}
EXAMPLE
$count = 0;
while ($count < 10){
print $count;
$count++;
}
until(条件表达式){
代码段A
}
EXAMPLE
$count = 0;
until ($count == 10){
print $count;
$count++;
}
do-while 循环
这里写代码片
未完待续