我们老大给了我三本书,让我学习下perl,昨天看了一天,今天给整理了下,两天的成果展现,没有什么脚本的基础,之前也就是看过python一点点,没用过!<br>还有一些没有测试过,没什么时间了,还得再看看最重要的模式匹配----先上一部分。<br>想想perl毕竟是一门语言,没有实战,还是不行!所以继续努力哦。。。。<br><br><br><br><br><br><br> #! /usr/bin/perl
# 一:在线帮助,运行简单perl脚本,模块的安装
##1:在线帮助:http://search.cpan.org/
##2:如何运行简单的perl呢?
cd /桌面
gedit firstperl.pl
然后编辑输入:
#! /usr/bin/perl ##这一行一定要加,perl编译器的地址
print
"hello world" ;
然后退出gedit
在终端输入: chmod
a+x firstperl.pl
./firstperl.pl
可以看到成功运行!
### =xxx 和 =cut 之间表示多行注释
#3:eclipse下安装perl插件:EPIC
#打开eclipse->help->install new software->add->输入:http://e-p-i-c.sf.net/updates/testing
#ok,开始安装下载,有时候安装不起来,一直在pending,,我遇到情况是家里能下,公司不能下,具体原因说不清楚!(看出我是菜鸟级别了!)
#4:模块的安装:
http://search.cpan.org/ 搜到模块然后下载至 /home/hqh/下载
cd ~/下载
tar zxvf URL-Signature-0.03.tar.gz
cd cd URL-Signature-0.03/
perl Makefile.PL
make
make install
# 二:perl数据类型与运算
#只说明几点注意的,具体问题具体分析咯
#1:整数,浮点数据都被perl当成双精度浮点数来处理
print
123243546;
print
"\n" ;
print
123_243_546;
print
"\n" ;
#123243546和123_243_546是等价的哦,人们一般经常看到的是用逗号隔开,但是逗号在perl有其他用法!
#至于16进制,8进制的,一般不常用吧,具体问题具体分析咯!
#2:perl的"布尔值",根据返回值来看
#数值:0代表false,其余都为true
#字符:空字符代表false,其余为true
#3:字符串,字符
print
‘huangqihao\n‘ ;
print
"huangqihao\n" ;
print
"huang" . "qihao\n" ;
print
‘huang‘ . ‘qihao\n‘ ;
print
‘huang‘ x 4;
print
"\n" ;
print
5 x 4;
print
"\n" ;
#说明三点:(1)单引号表示字符串,但换行符不被识别,最好就用双引号吧。(2)另外 x 读做 唉克思,用于重复字符串的运算符,x后面跟的是重复的次数!
#(3) . 操作符用于连接字符串!!
#4:运算符:主要注意下 ** 以及 \
print
2**3;
print
"\n" ;
print
10%3;
print
"\n" ;
print
10.1%3;
print
"\n" ;
print
10.1%3.1;
print
"\n" ;
#看出 无论是10.1还是3.1都要先转换成整数(我在这里会联想到之前说的:就是之前说perl里面整数和浮点数都当成双精度浮点数,我的理解是取余运算的时候会做trunc)
#5:变量
$i =3;
print
"$i is equel to 3\n" ;
#变量内插字符串
print
"\$i is not equle to 3\n" ;
# 变量不内插字符串,前面加一个 \
# 三:控制结构
#选择结构
$cin1 = "\n" ;
if ( $cin1
eq "\n" ){
print
"空屁,啥也没有!\n" ;
} else {
print
$cin1 ;
}
$changeline = "please use chomp to change line \n" ;
print
$changeline ;
$changeline1 = chomp ( $changeline );
#chomp有一个返回值,返回移除的个数
print
$changeline1 ;
print
"\n" ;
#undef相当于null,defined函数,识别是不是空字符串
$cin1 = "" ;
if ( defined ( $cin1 )){
print
"it is a string" ;
}
else {
print
"null" ;
}
#循环
$n =0;
while ( $n <10){
$sum += $n ;
$n +=2;
print
"$sum\n" ;
}
print
"$sum\n" ;
#! /usr/bin/perl
# 四:数据结构
#数组,perl中的数组跟列表有很强的关联性,个人认为数组是从操作意义上的列表!(菜鸟不大懂,勿喷!)
@data =( "a" , "b" , "c" );
print
"$data[1]\n" ;
print
"@data\n" ;
$data [1]= "yellow" ;
print
"@data\n" ;
#以上是简单的对列表进行替换,注意符号,当处理数据中的指定某个元素时,用$符号!!
$felements = $data [0];
print
$felements ;
$end = $#data ;
print
$end ;
$numbers = $end +1;
print
$numbers ;
$lelements = $data [ $#data ];
print
$lelements ;
#注意 $#符号取最后一个元素的下标!,所以实际长度为 $#data+1
@aa1 =(1..7);
print
@aa1 ;
( $a , $b , $c )=( ‘a‘ , ‘b‘ , ‘c‘ );
print
$a , $b , $c ;
#交换两个变量
( $a , $b )=( $b , $a );
print
$a , $b ;
print
"\n" ;
#qw符号
( $a , $b , $c )=qw !abc 123 434!;
print
"$a\n$b\n$c\n" ;
( $a , $b , $c )=qw .abc 123 434.;
print
"$a\n$b\n$c\n" ;
( $a , $b , $c )=qw :abc 123 434:;
print
"$a\n$b\n$c\n" ;
#pop,push
@www =( ‘ab‘ , ‘cd‘ , ‘ef‘ );
print
pop ( @www );
push ( @www ,0);
print
@www ;
#pop 和 push的第一个参数都为数组变量
#shift,unshift
@www =( ‘ab‘ , ‘cd‘ , ‘ef‘ );
print
shift ( @www );
unshift ( @www ,4);
print
@www ;
#shift和 unshift的第一个参数都为数组变量
#数组插入字符串
$ii = "[email protected] sdjfkl" ;
print
$ii ;
#reverse,sort
@www =( ‘db‘ , ‘cd‘ , ‘ec‘ );
print
reverse ( @www );
print
sort ( @www );
print
"\n" ;
#foreach
foreach
$element ( @www ){
print
"$element\n" ;
}
#
五:函数
##没有参数
sub
sum1{
print
1+9;
}
&sum1 ;
sub
sum2{
3+5;
}
print
3* &sum2 ;
foreach
$s (1..9){
print
$s *$s ;
print
"\n" ;
}
foreach (1..9){
print
$_ ;
print
"\n" ;
print
$_ *$_ ;
print
"\n" ;
}
###$_其实就是for里面的i
#@_ 在某个函数内,数组 @_ 包含传递给该函数的所有参数。
#$_ 默认的输入/输出和格式匹配空间
# 六:文件操作
#读文件
open (FD, "/home/hqh/桌面/2.pl" )|| die ( "can not open the file" );
@aa =<FD>;
print
@aa ;
foreach
( @aa ){
print
"$_\n" ;
}
#写文件
open (HD, ">>/home/hqh/桌面/3.pl" )|| die ( "can not open the file" );
#HD为写入句柄
print
HD "@aa" ;
open (ND, "/home/hqh/桌面/3.pl" )|| die ( "cant not open the file" );
@bb =<ND>;
print
@bb ;
#追加文件
open (ZJ, ">>/home/hqh/桌面/3.pl" )|| die ( "can not open the file" );
print
ZJ "@aa" ;
open (ZJ, "/home/hqh/桌面/3.pl" )|| die ( "can not open the file" );
@cc =<ZJ>;
print
@cc ;
#! /usr/bin/perl
# 七:hash
#hash 形式,赋值等
%ha0 =();
$ha0 { "yellow" }= "great" ;
print
%ha0 ;
%ha1 =( "a" ,12, "b" ,13, "c" ,17);
print
%ha1 ;
print
"\n" ;
%ha2 =( "a" =>12, "b" =>13, "c" =>17);
print
%ha2 ;
print
"\n" ;
#hash keys 和values each
print
keys %ha2 ;
print
"\n" ;
print
values %ha2 ;
print
"\n" ;
#注意用while函数
while (( $key , $value )= each ( %ha2 )){
print
"key is $key ; value is $value \n" ;
}
#delete,exists函数,内插函数
%hash4 =( "a1" ,111, "b" ,123, "c" ,234, "d" ,789);
print
%hash4 ;
delete
$hash4 { "a1" };
if ( exists ( $hash4 { "a1" })){
print
"have!" ;
} else {
print
"no have !!" ;
}
#内插
print
"hash array is %hash4" ;
# 八:控制结构
#unless 与 if(!condition)一个含义
#untile与while(!condition)一个含义
#elseif函数
#裸块
#表达式修饰符,一句话简单明了,后面加条件,看下面例子
%hash9 =( "a" =>3, "b" =>4, "c" =>6);
print
keys %hash9 unless ( values
%hash9 ) %2==0;
#for控制结构,和C++ 很像
$sum =0;
for ( $i =0; $i <=10; $i ++){
$sum = $sum + $i ;
}
print
$sum ;
print
"\n" ;
#关注循环体中last,next,redo的操作!!!
$sum1 =0;
for ( $i =0; $i <=10; $i ++){
$sum1 = $sum1 + $i ;
last
if ( $i ==6);
}
print
"sum1=$sum1\n" ;
##只加到5,遇到6,就跳出循环啦!!
$sum2 =0;
for ( $i =0; $i <=10; $i ++){
next
if ( $i ==6);
$sum2 = $sum2 + $i ;
}
print
"sum2=$sum2\n" ;
#######6木有加进去,其他都加进去了
$sum3 =0;
for ( $i =0; $i <=10; $i ++){
print
"hello,redo is here!\n" ;
redo
if ( $i ==6);
$sum3 = $sum3 +1;
}
print
"sum3=$sum3\n" ;
############一直在循环print hello..
#三元操作符,等于R语言中ifelse函数
$a =1+1>3 ? " larger"
: " smaller" ;
print
$a ;
# perl目录文件操作
#
chdir
"/home/hqh/桌面/perlperl" or die
"cannot chdir to /etc: $!" ;
@fileparameters = glob "*" ;
print
@fileparameters ;
chdir
"/home/hqh/桌面/perlperl/first perl" or die "cannot chdir to /etc: $!" ;
@fileparameters = glob "*" ;
print
@fileparameters ;
chdir
"/home/hqh/桌面/perlperl" or die
"cannot chdir to /etc: $!" ;
#解析目录
opendir (HD , "/etc" ) || die
"can not opendir! " ;
@aa = readdir (HD);
print
@aa ;
foreach
$tt ( @aa ){
print
"$tt\n" ;
}
closedir
HD;
#删除操作 unlink 与glob结合
#unlike glob "*.pm";
#重命名 rename
#创建和删除目录 mkdir rmdir
#修改权限 chmod
#改变所有者 chown 1004 ,100,glob "*.pm" ,1004表示user的ID,调用 getpwnam 函数,将名字转换为数字,而对应的 getgrnam
#将组名转换为数字
#index函数,查找子串在主串中的位置!
#substr函数
#sprintf函数,返回请求的字符串,不被打印出来,用于赋值,比较豪!
#$score{$b} <=> $score{$a}的意思是根据 score,将它们按照数字逆序排序
|