标量 $ $cents 一个独立的数值(数字或字串)
数组 @ @large 一列数值,用编号做键字
散列 % %interest 一组数值,用字串做键字
子过程 & &how 一段可以调用的 Perl 代码
类型团 * *struck 所有叫 struck 的东西
$answer = 42; # 一个整数
$pi = 3.14159265 # 一个"实"数
$pet = "Camel"; # 字串
$sign = "I ove my $pet"; # 带代换的字串
$cose = 'It cose $100'; # 不带代换的字串
$thence = $whence; # 另一个变量的数值
$salsa = $moles * $avocados; # 一个胃化学表达式
$exit = system("vi $file"); # 一条命令的数字状态
$cwd = `pwd`; # 从一个命令输出的字串
数组 @varray = ("0","1","a","b","c");
$varray[0]="0";
对象 %vobject = ("Sun" => "Sunday",
"Mon" => "Monday",
"Tue" => "Tuesday",
"Wed" => "Wednesday",
"Thu" => "Thursday",
"Fri" => "Friday",
"Sat" => "Saturday" );
$vobject{"Sun"} = "Sunday";
$vobject{"other"} = ["Leah", "Rachel", "Bilhah", "Zilpah"];
$vobject{"Jacob"} = {
"Leah" => ["Reuben", "Simeon", "Levi", "Judah", "Issachar", "Zebulun"],
"Rachel" => ["Joseph", "Benjamin"],
"Bilhah" => ["Dan", "Naphtali"],
"Zilpah" => ["Gad", "Asher"],};
open(SESAME, "filename") # 从现存文件中读取
open(SESAME, "<filename") # (一样的东西,明确地做)
open(SESAME, ">filename") # 创建文件并写入
open(SESAME, ">>filename") # 附加在现存文件后面
open(SESAME, "| output-pipe-command") # 设置一个输出过滤器
open(SESAME, "input-pipe-command |") # 设置一个输入过滤器
close(SESAME)
读行操作符 <> 来读入一行
open(GRADES, "grades") or die "Can't open grades: $!n";
while ($line = <GRADES>) {
($student, $grade) = split(" ", $line);
$grades{$student} .= $grade . " ";
}
等于 == eq 如果 $a 等于 $b 返回真
不等于 = ne 如果 $a 不等于 $b 返回真
小于 < lt 如果 $a 小于 $b 返回真
大于 > gt 如果 $a 大于 $b 返回真
小于或等于 <= le 如果 $a 不大于 $b 返回真
比较 <=> cmp 相等时为 0,如果 $a 大为 1 如果 $b 大为 -1
-e $a 存在 如果在 $a 中命名的文件存在则为真
-r $a 可读 如果在 $a 中命名的文件可读则为真
-w $a 可写 如果在 $a 中命名的文件可写则为真
-d $a 目录 如果在 $a 中命名的文件是目录则为真
-f $a 文件 如果在 $a 中命名的文件是普通文件则为真
-T $a 文本文件 如果在 $a 中命名的文件是文本文件则为真
--循环控制--
if ($city eq "New York") {
}
elsif ($city eq "Chicago") {
}
else {
}
unless ($destination eq $home) { print "I'm not going home.en"; }
while (@ARGV) { process(shift @ARGV);}
foreach $user (@users) { }
foreach $key (sort keys %hash) { }
last , next (类似break,continue)
--END--
while ($line = <FILE>) {
if ($line =~ /http:/) {
print $line;
}
}
=~ 符号(模式绑定操作)
在 $line 中寻找匹配正则表达式"http:",如果发现了该表达式,操作符返回真并且执行代码段
while (<FILE>) { print if /http:/; }
缺省的变量$_
正则表达式
空白 [tnrf] s
词 [a-zA-Z_0-9] w
数字 [0-9] d
+:代表 {1,},意思为"最少一次".
*:表示 {0,},表示"零次或多次".
?:表示 {0,1},表示"零或一次".
$_="larry:JYHtPh0./NJTU:100:10:Larry Wall:/home/larry:/bin/tcsh"
print /.+:/;
并且想用 /.+:/ 来匹配“larry:”,但是因为 + 是贪婪的,这个模式将匹配一直到 /home/larry: 为止。因为它尽可能多地匹配直到最后出现的一个冒号。有时候你可以使用反向的字符类来避免上边的情况,比如使用 /[^:]+:/,表示匹配一个
print reverse sort map {lc} keys %hash;
引起构造
常用 通用 含义 替换
' ' q// 文本字串 否
" " qq// 文本字串 是
` ` qx// 执行命令 是
() qw// 单词数组 否
// m// 模式匹配 是
s/// s/// 模式替换 是
y/// tr/// 字符转换 否
" " qr// 正则表达式 是