1、一个简单地例子 hello ,world 编程基础:
#! /usr/bin/perl
print “Hello,word!\n”
在Linux中用 chmod a+x my_program 来赋予其可执行的权限,或者在chmod 后使用755 来代替a+x 。两种
方法都是告诉系统这个文件是一个程序(可执行的)。
现在你可以如下运行它:
$ ./my_program
第一行是特殊的注释。在Unix 系统中,如果文本的第一行前两个字符是“#!”,接着的就是执行下面文件的程序。在本例中,这个程序是/usr/bin/perl。
#!行和程序的可移植性相关,需要找到每台机器的存放地点。幸运的是,通常都被放在/usr/bin/perl 或/usr/local/bin/perl 中。如果不是这样,则需要找到你自己机器上perl 的存放地点,然后使用那个路径。在Unix 系统中,可能使用如下一行找到perl:
#! /usr/bin/env perl
2、一个有意思的perl程序:
#! /usr/bin/perl
@lines= `perldoc –u –f atan2`;
foreach(@lines){
s/\w<([^>]+)/\U$1/g;
print;
}
3、数字操作符:
Perl 除了提供通常的操作符加(+),减(-),乘(*),除(/)等等之外,还提供了模数运算符(%)。10%3 的值是10 除以3 的余数。两个操作数首先变成它们对应的整数值,如10.5%3.2 转换为10%3后再计算。另外,Perl 中提供了和FORTRAN 类似的指数操作符,C 和Pascal 很希望有类似的能力。这个操作符由两个*号表示,如2**3,表示2 的3 次方,等于8。
双引号字符串中的转义符
符号含义
\n 换行
\r 回车
\t 制表符
\f formfeed
\b 退格
\a 响铃
\e escape(ASCII 中的escape 字符)
\007 任何八进制值(这里是,007=bell(响铃))
\x7f 任何十六进制值(这里是,007=bell)
\cC 一个控制符(这里是,ctrl +c)
\\ 反斜线
\” 双引号
\l 下个字符小写
\L 接着的字符均小写直到\E
\u 下个字符大写
\U 接着的字符均大写直到\E
\Q 在non-word 字符前加上\,直到\E
\E 结束\L,\E 和\Q
表2-3 数学运算符
举例运算符名表达式的值
5 + $t 加 5与$ t相加的和
$y - $x 减 $ y与$ x的差
$e * $pi 乘 $ e与$ p i的积
$f / 6 除$ f 除以 6得出的商
24 % 5 求余 数2 4除以5得出的余数( 4)
4 * * 2 取幂 取4的二次方
表2-4 一些带名字的运算符
运算符用法举例结果
i n t i n t(5 . 6 2 3 4) 返回它的参数的整数部分( 5)。
l e n g t h l e n g t h ( " n o s e " ) 返回它的字符串参数的长度( 4)。
l c l c("ME TO O") 返回它的转换成小写字母的参数(" me too ")
u c u c("hal 9000") 返回与l c相反的参数值("HAL 9000")
c o s c o s(5 0) 返回弧度5 0的余弦值( . 9 6 4 9 6 6)
r a n d r a n d(5) 返回从0到小于该参数值之间的一个随机数字。如果该参数被省略,则返回0至1之间的一个数字
表3-1 数字关系运算符
运算符举例说明
= = $x == $y 如果$ x等于$ y,则为真
> $x > $y 如果$ x大于$ y,则为真
< $x < $y 如果$ x小于$ y,则为真
>= $x >= $y 如果$ x大于或者等于$ y,则为真
< = $x <= $y 如果$ x小于或者等于$ y,则为真
! = $x != $y 如果$ x不等于$ y,则为真
表3-2 字母关系运算符
运算符举例说明
e q $s eq $t 如果$ s等于$ t,则为真
g t $s gt $t 如果$ s大于$ t,则为真
l t $s lt $t 如果$ s小于$ t,则为真
g e $s ge $t 如果$ s大于或者等于$ t,则为真
l e $s le $t 如果$ s小于或者等于$ t,则为真
n e $s ne $t 如果$ s不等于$ t,则为真
表3-4 逻辑运算符一览表
运算符替代名举例分析
& & a n d $s && $t 只有当$ s和$ t都是真时,才是真
$q and $p 只有当$ q和$ p都是真时,才是真
| | o r $a || $b 如果$ a或$ b是真,则为真
! n o t ! $m 如果$ m不是真,则为真
4、字符串操作符:
字符串可由. 操作符连接(是的,只是一个点) 。它不会改变任何字串,就像2+3 不会改变2 或3 一样。串联之后的字符串
可供以后使用:
“hello”. “world” # 同于“helloworld”
“hello”. ‘’. “world”#同于“hello world”
‘hello world’. “\n” #同于“hello world\n”
一个特殊的操作符是字符串重复操作符(string repetition operator),由小写的字母x 表示。这种操作能把操作符左边字符串
重复操作符右边数字那么多次:
“fred”x 3 # “fredfredfred”
“barney”x (4+1) # “barney”x 5, “barneybarneybarneybarneybarney”
5 x 4 #实际上是“5”x 4, “5555”
5、perl 内嵌的警告:
当程序中包含可能的错误时,可以要求Perl 警告你。运行程序时,可以在命令行中使用–w 这个参数把警告打开:
$ perl–w my_program
或者,如果一直都需要警告(warning),可以在#! 这一行加上-w,如:
#! /usr/bin/perl –w
6、标量变量:
变量是保存一个或多个值的容器,变量的名字在整个程序中保持不变,但其包含的值可以变化。
标量变量可以存放一个标量值。标量变量的名字由一个美圆符号($)后接Perl 标识符:由字母或下划线开头,后接字母,数字,或者下划线。或者说由字母,数字和下划线组成,但不能由数字开头。大小写是严格区分的:变量$Fred 和变量$fred
是不同的。任意字母,数字,下划线都有意义,如:
$a_very_long_variable_that_ends_in_1
和变量:
$a_very_long_variable_that_ends_in_2
是不同的。
标量变量在Perl 中由$开头。
7、标量赋值:
标量变量最通常的操作是赋值:将值赋给变量。Perl 中的赋值符是等号(和许多语言类似),将等号右边的值赋给等号左边
的变量:
$fred = 17; #将17 赋给变量$fred
$barney =‘hello’; #将五个字母的字符串‘hello’赋给$barney
$barney = $fred + 3;# 将$fred 的值加上三赋给$barney (20)
$barney= $barney*2;#将变量$barney 乘2 再赋给$barney (40)
注意最后一行中$barney 变量使用了2 次:一次从中取值(等号右边)一次作为赋值的对象(等号左边)。这是合法的,安
全的,且普遍使用。
像$fred=$fred+3(同一个变量在赋值符两边出现)这样的表达式在Perl 中经常出现(同C 和Java 类似),因此Perl 提供了
一种简便的替代方法:二元赋值操作符。几乎每一个二元操作符都有一个等价的二元赋值形式:由这个符号后接等号组成。
例如,下面两行是等价的:
$fred = $fred + 5; #没有用二元赋值操作符
$fred+=5; #利用二元赋值操作符
下面的也是等价的:
$barney = $barney*3;
$barney*=3;
上述两例中,变量借助自身而非别的变量来改变自身的值。
另一个常用的赋值操作符是字符串连接符号(.);其赋值形式为(.=):
$str = str . “”; #$str 后接空格
$str .= “”’; #同上
8、条件为假的情况:
数字0为假。
• 空的字符串(“”)和字符串“0”为假。
• 未定义值u n d e f为假。
• 其他东西均为真。
9、控制语句Perl 练习小例子(自己写的)
例1:
#!/usr/bin/perl -w
$counter=0;
while($counter<10){
print "this number is still lower than 10:$counter\n";
$counter+=2;
}
for($i=0;$i<=100;$i+=5){
last if($i==50); #last能够提前终止循环条件,而不用判断for循环的终止条件;
print "i is now $i\n";
}
for($i=0;$i<=100;$i+=1){
next if($i%2); #next 重新将循环条件传回顶部,接着进行下一个循环,直到循环结束;
print "An old number is :$i\n";
}
OUTER:for($i=0;$i<=100;$i++){
INNER: for($j=0;$j<=100;$j++){
if($i * $j == 140){
print "$i and $j is 140.\n";
last OUTER;
}
}
}
例2:
#!/usr/bin/perl -w
print "hello,world!\n";
$num=99999;
$area=3.14*($num**2); #**2表示某一值得2次幂
print "$area\t$num\n";
$char="*" x 50;
print "$char\n";
print int(rand(10));
print "\n";
print cos(30);
print "\n";
print "please input a num :";
$size=<STDIN>; #从键盘输入一个参数值
chomp $size; #删除参数结尾处的自动换行符
print "my shoes size is $size.\n";
例3:
#!/usr/bin/perl -w
@alan=qw(apple ora pine purple bai alan job bob andy oracle);
print "@alan"; # 输出数组alan的元素
print "\n";
print "最后一个下标是:";
print "$#alan"; # 输出数组alan的最后一个下标值;
$size=@alan; #将数组alan的元素数赋给$size;
print "\n";
print "一共有的元素数:";
print "$size\n";
($bai)=@alan; #将数组alan的第一个元素赋给$bai;
print "\n";
print "$bai";
print "\n";
print scalar(@alan);#scalar函数强制上下文,返回数组alan的元素个数;
print "\n";
print scalar(localtime);#返回当前系统时间;
print "\n";
foreach $meta(@alan){ #将数组alan的各个元素赋给$meta
print "I would like a meta of $meta\n";
}
@lines=qw(this is my first reverse);
print join (' ', reverse @lines);#reverse 是一个倒序输出函数;join函数和split函数刚好相反,
#join是将数组转换成字符串,而split函数是将字符串转换成数组;
print "\n";
print "please input a string :";
while (<STDIN>){#从键盘输入字符串
($fei)=split(/ /,$_);#使用split函数将标量转换成数组,这里$_接收的是从键盘输入的字
#符串的第一个字符串,其他的都丢弃;
print "the first character is $fei\n";
}
@message="This is my first join";
print "The string \"$message\" consists of:",
join('-',split(//,$message)); #标量转换成数组的方法之一是使用split函数。
#用数组来创建一个标量,也就是进行split的反向操作,可以使用join函数
例4:
#!/usr/bin/perl -w
#实现对文件的读写操作:
open (MYFILE,"D:/perl/open") || die;
@line=<MYFILE>;
print @line;
open (ALAN,">>D:/perl/open.txt") || die "$!\n"; #>>是追加到文件的末尾;>是覆盖原来的内容;文件句柄最好使用大写;
#print ALAN "I am a worker!\nI will try my best to work !"; #使用print 函数将要输入的内容list写出来!
#binmode (ALAN);#标记为二进制文件;当打开的文件时二进制的时候必须标记,应该在文件句柄打开之后和对它进行输入输出
#之前使用binmode
print ALAN <@line>; #复制文件open中的内容到open.txt
close MYFILE;
close ALAN;