perl重点基础知识整理
#若无特殊说明,以下都是基于ubuntu 13.04版本
1:终端下运行perl脚本:
step1:
在桌面新建一个perl脚本,输入:
#! /usr/bin/perl
print
"hello world!" ;
step2:
打开终端:
hqh @ubuntu :~$ cd ~/桌面
hqh @ubuntu :~/桌面$ sudo chmod
a+x h.pl
hqh @ubuntu :~/桌面$ ./h.pl
hello world!hqh @ubuntu :~/桌面$
看到输出: hello world!
2:模块的安装:
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
3: defined , undef , exists 函数:
#! /usr/bin/perl
my $cin = undef ;
if ( defined ( $cin ))
{ print
"The input was $cin" ;
} else
{
print
"No input available! \n" ;
}
my %hash1 =( "a" =>1, "b" =>2, "c" =>3);
print
exists ( $hash1 { "a" }), "\n" ;
print
exists ( $hash1 { "d" }), "\n" ;
print
defined ( $hash1 { "a" }). "\n" ;
说明:
exists 主要针对hash,判断是否存在key
如果一个变量为 undef ,则definded判断该变量为0,其他情况为1
4:hash解析
#! /usr/bin/perl
#hash几种解析方式
my %hash1 =( ‘a‘ ,2, ‘b‘ ,3);
while ( my ( $k , $v )= each %hash1 ){
print
"$k--->$v" ;
print
"\n" ;
}
#hash长度
my $len = scalar
keys %hash1 ;
print
$len , "\n" ;
foreach
my $key1 ( keys
%hash1 ){
print
$key1 , "-->" , $hash1 { $key1 };
print
"\n" ;
}
5:深入理解 @_ 以及 $_
@_ :默认的参数数组
$_ :默认的变量
自己写了一段下面的程序,清晰了!!嘿嘿
#! /usr/bin/perl
sub myfun2{
A1: for ( my
$i =0; $i <=4; $i ++){
print
$_ [ $i ], "\n" ;
}
my
$str1 = shift
@_ ;
print
@_ , "\n" ;
print
scalar @_ , "\n" ;
my
( $str2 , $str3 )= @_ [2,3];
print
"my str1 is $str1 \n" ;
print
"str2 is $str2 and str3 is $str3" ;
foreach
my $keys ( @_ ){
print
"key analysis" , $keys , "\n" ;
}
A2: for ( my
$i =0; $i <=3; $i ++){
print
$_ [ $i ], "\n" ;
}
}
print
&myfun2 (1,2,3,4,5), "\n" ;
调用 sub 程序,
将1到5默认复制给 @_ ,
shift
@_ ,取出 @_ 数组的第一个元素1,并且 @_ 自动更新为(2,3,4,5);
将 @_ 的第3,4个元素复制给str2,str3
遍历数组
$_ 表示默认的变量,可以看出,变量的个数与 @_ 的长度一样,看A1和A2两段 for 循环就可以知道,随着 @_ 做了 shift 后,长度发生变化,而 $_ 的个数也随之变化
6: index , rindex , split 函数
#! /usr/bin/perl
my $url = "http://www.qq.com.sina.com.cn//.wwwsohu.com.cn.oo.yellow" ;
print
$url , "\n" , length ( $url ), "\n" ;
print
index ( $url , "www" ), "\n" ;
print
index ( $url , "www" ,8), "\n" ;
print
index ( $url , "." ), "\n" ;
print
rindex ( $url , "." ), "\n" ;
my @list = split (/\./, $url );
print
@list ;
print
scalar @list , "\n" ;
my @list1 = split (/\\\\/, $url );
print
@list1 ;
7:高级排序---针对hash哦
my %score = (
"barney" =>100,
"fred" =>205,
"dino" => 30,
"yellow" =>100);
my @winners = sort
by_score keys
%score ;
sub
by_score{
$score { $b }<=> $score { $a }
}
print
@winners ;
sub
by_score_or_name{
$score { $b }<=> $score { $a }
or
$a
cmp $b ;
}
my @winners1 = sort
by_score_or_name keys
%score ;
print
@winners1 ;
8:之前的学习笔记
#! /usr/bin/perl
my $str = "huangqihao" ;
print
$str x 4;
print
"$str \n" x 4;
print
5 x 4;
print
"\n" ;
print
2.5%2;
print
"\n" ;
print
2.5**7;
print
"\n" ;
#交换两个变量
( $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" ;
#
#读文件
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 ;
#关注循环体中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 ;
#三元操作符,等于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函数,返回请求的字符串,不被打印出来,用于赋值,比较豪!
|