脚本
Perl 是一种脚本语言,它在每次运行前都需要编译。在unix/linux下,通常perl脚本都是以 #!/usr/bin/perl 为开头的。这其实是perl(可执行文件)的全局路径,这个路径当然可以写成其他,只要能找到perl, 但有一点需要注意,perl的全局路径(/usr/bin/perl)不能超过32个字符。Perl的内容和命令行
Perl路径给出后: #!/usr/bin/perl 接下来就该写perl脚本实际 内容了,你可以什么都不写,也可以写点注释语句,当然最应该写的就是命令行了。通常,注释行都是 以" #" 开头的,内容任意,反正在perl脚本中不会被运行。命 令行是以非空格字符开始并且以" ;"结束的。所以,你可以在把一条命令 写成多行,而直到你给出分号时结束。直接命令行和子程序(函数)
普通命令行在perl脚本中是由上及下一行一行执行的。然而,子程序可以放到任何地方,只有被调用时才会被执行 。子程序是什么样子的呢?如果你看到一段代码以"sub"开头,并且格式是这样的:sub name {command;} , 那 么这就是子程序了。其他特殊行
Perl 可以包含其他程序的代码,但需要这样的格式: require something 或者 use something.引用
单引号: '' 或者: q//双引号: "" 或者: qq//
引用执行结果: `` 或者: qx//
引用几个词组: ('term1','term2','term3') 或者: qw/term1 term2 term3/
引用一个被引用的字符串: qq/"$name" is $name/;
引用包含 "/": qq!/usr/bin/$file is readdy!;
标量上下文和列表上下文
在Perl中,标量上下文和列表上下文是有区别的,这是Perl脚本语言的一个亮点,这个特性在众多脚本语言当中是 独一无二的,也是非常实用的。在Perl的子程序中,不仅可以返回一个列表类似于C中的标量,而且还可以返回一个数组,这个数组不仅可 以给出标量上下文中元素的个数还可以给出列表上下文中元素本身。
Perl该特性的巨大价值应该是显而易见的。
变量和运算符
概况
Perl的变量包含很多内容:标量变量、一维数组、二维数组以及关联数组。你可以通过特殊字符来声明Perl的变量 是标量还是数组,如 $variable 表示普通的标量变量; @variable 表示数组; %variable 表示关联数组。 在Perl中,你不需要去区分变量中的字符串和数字,因为Perl可以自动识别它们。标量
赋值变量: $price = 300; $name = "JOHN"; 变量的计算: $price *= 2; $price = $oldprice * 4; $count++; $worth--; 输出变量的值: print $price,"\n";数组
赋值数组: $arr[0] = "Fred"; $arr[1] = "John"; 输出数组: print join(' ',@arr),"\n";二维数组: $arr[0][0] = 5; $arr[0][1] = 7;
哈希(关联数组)
赋值单一元素的哈希: $hash{'fred'} = "USA"; $hash{'john'} = "CANADA";赋值完整哈希:
%a = (
'r1', 'this is val of r1',
'r2', 'this is val of r2',
'r3', 'this is val of r3',
);
或者:
%a = (
r1 => 'this is val of r1',
r2 => 'this is val of r2',
r3 => 'this is val of r3',
);
赋值
" ="可以把一个值赋给一个变量,或者其他和 "="组合的操作符在赋值的同时也可以做其他操作。$var = "string"; 把string赋予$var
$var = 5; 把数字赋值给$var
$var .= "string"; $var 后面加string
$var += 5;$var加5
$var *= 5; $var乘以5
$var ||= 5; 如果 $var 为 0 则$var的值为 5
$var x= 3; 使$var重复3次,如 $var 原来为a,则现在 为 aaa
替换和赋值:
($new = $old) =~ s/pattern/replacement/;
比较
字符串的比较: eq ne 如 in: $name eq "mary".数字的比较: == != >= <= <=> 如: $price == 400.
And/Or/Not
评估成功或者失败的表达式:
$yes or die; 意思是,如果$yes 没有定义那么脚本会 exit.
AND 我们可以写成: && 或者 " and" 而OR 我们可以写成: || 或者" or". Not写成 " !"或者 " not".
And, Or 和 Not 一般用于 if() 语句中:
if($first && $second){....;}
if($first || $second){....;}
if($first && ! $second{....;} 这个表示,如果$first 为真,并且$second为假,才会执行{}内的语句。
但大多时候,我们会用unless()语句去替代Not,这样看起来更容易懂:
print if ! $noway; one uses: print unless $noway;
.
分支
if
if(condition){
command;
}elsif(condition){
command;
}else{
command;
}
如果满足 condition, 那么会执行 command;
unless (和if相反)
unless(condition){
command1;
}else{
command2;
}
只有满足了condition才会执行command2, 否则执行command1;
循环
while
while(condition){ command; } # 这里的next if表示,当condition2为假时,才会执行 command2 while(condition1){ command1; next if condition2; command2; } # 当满足last condition时会退出循环 while(condit