perl 学习笔记
一:基础
1:安装perl
print "Hello , world!\n";
#!/usr/bin/perlprint 1.2;print 2.000;print -3;print -1.2E22;print 12_321_435;#数字,方便查看print o377; #八进制print oxff; #十六进制print ob11111111;#二进制print 2+2;print 2-1.2;print 1.2 - 3.3;print 1/3; #内部使用双精度计算print 1.0/3;print 1/2.0;print 10%3;print 3**3;
2):字符串(使用utf8编码,文件也须要保存为utf8格式)
#!/usr/bin/perluse utf8; #使用utf8字符集binmode(STDIN, ':encoding(utf8)'); #使用utf8输入binmode(STDOUT, ':encoding(utf8)'); #使用utf8输出binmode(STDERR, ':encoding(utf8)'); #使用utf8输出错误print 'gbz is good\n'; #使用单引号的字符常量print "gbz is good\n"; #使用双引号的字符常量print "\x{2744}"; #双引号的常量自动转义#perl中的操作符跟据运算符号判断须要的是什么类型的值,并会自动转换print "he" . " gg\n"; #.连接符print "he" * 5 ."\n"; #*算数运算,把he转为数字为0print "33he" * 2 . "\n"; #33he转为数字为33print "he" x 4.8; #x字符串复制倍数print "he" . 3 * 4 ; #先算数运算,在字符运算
3):打印错误信息
#!/usr/bin/perl -w 打印简单错误信息use diagnostics; #打印详细错误信息
#!/usr/bin/perluse utf8$age = undef;$age2 = undef;
print $age += 1; #与数字运算时,表示0
print "gbz" . $age2 . "gbz"; #与字符运算时,表示空串print defined(undef); #判断是否为undef,是:空,否:1$name = "gbz"; #变量名要有意义$name_length = length($name); #包括字母下划线等print $name;print "${name} is size : $name_length\n"; #字符串中引用尽量使用${}$ord_name = ord($name); #一个字符转换为码值print $ord_name . "is " . chr($ord_name); #码值转字符
use utf8;
#字符比较符:eq,ne,lt,gt,le,ge
#数字比较符:==,!=,< ,> ,<=,>=
print '1' eq '1'; #字符串比较,true 返回1
print '2' eq '1'; #字符串比较,false 不返回
print 1 == 1; #数字比较
print 2 == 1;
$name = '\n';
if(''|0|'0'|$name){ #假:空,数字0,字符0
print 'true';
}else{
print 'flase';
}
$line = <STDIN>; #用户输入流,以回车结束
if($line eq "\n"){
print "this is blank!\n";
}else{
print "not blank: $line";
}
chomp($line); #去掉末尾回车符,返回1,否则返回0
chomp($line2 = <STDIN>); #先去掉回车,再赋值给变量
print $line2;
$line3 = <STDIN>;
print chomp $line3; #perl方法可以不用括号
$count = 0;
while($count < 10){
$count += 2;
print "${count}\n";
}
6):列表和数组
use utf8;$list[0] = 1; #数组从0开始
$list[1] = '2'; #可以存放不同类型的值
$list[100] = 100; #创建了101个元素,中间的值为undef
print $list[0] . '--' . $list[100] . '--' . $list[50] . '--';
print $list[1.22]; #下标去掉小数
print $list[-1]; #最后一个print "\n";
$list = 111;
print $list; #与数组同名的变量,与数组是不相关的两个变量
print $list[-22];($array11,$array12,$array13) = (1,2,3); #列表创建及赋值
($array21,$array22) = (1..6); #..范围操作符,把前两个元素赋值
$array3 = qw ( 1 2 3 ); #使用qw 创建数组
$array4 = qw / 1 2 3 4 '1'/;
print $array11;
print $array22;
print $array4; #返回最后一个元素@array = (1.2..5.6); #小数会转换成整数
print @array; #@表示整个数组
print pop @array; #取出末尾一个元素
push @array,1..3; #把1,2,3放到@array末尾
print @array;
print shift @array; #取出第一个元素
unshift @array,1; #把1放到开头
splice @array,1,2,qw(22); #从索引1开始,取出两个元素,用22替换$_ = '44'; #$_是perl的默认变量,是全局变量
foreach $_ (@array){ #在循环中$_是局部变量,与全局变量占用不同的存储空间
print $_ . "\n";
}
print $_;#循环外打印的是全局变量的值print reverse 1..6; #倒序
print sort 5..10,'ss',' ',"\n"; #unicode码值顺序
7):map(哈希)
$map{age} = 25;   #key自动转为字符串
               $map{1} = undef;
               $map{undef} = 1;
@k = keys %map; #得到所有key
print " $key ==> $value";
#!/usr/bin/perluse utf8;#use strict; #use 5.012 严格编译检查,建意开启sub max {$n += 1; #perl默认变量都是全局变量print "number is $n\n";}&max; #调用自定义方法&max;sub max { #会覆盖同名方法,此时上面的两个调用的也是被覆盖的方法print "~~~~";}max; #如可没有和perl内置方法重名可以省略&号调用方法sub number {$n = 0;$n + 3; #默认子程序返回值为最后一句代码的值}print &number;sub return_sub {1 + 1;return 22; #可以返回列表,标量,undef; return ; 一般表示程序执行有误1 + 2;}print return_sub;sub unmber_max {my($m,$n) = @_; #my()用来定义私有变量,与方法外同名变量互不影响if ($_[0] > $_[1]){ #perl使用@_来接收参数,是私有变量$m; #也会使用$_[index]数组来接收参数}else{$n;}}print &unmber_max(19,30);use 5.010; #foreach须要设定版本才可使用sub addlist {state @lists; #私有变量,其值会被保存下来,留给下一次子程序执行时继续使用foreach my $l (@_){push @lists,$l;}say "this list @lists";}addlist(1..4);addlist(2,7);say @lists; #方法外不能访问state 定义的变量
print "I saw ${line}\n";
}
//简写
while (<STDIN>){
print "I saw $_\n";
}
while (<>){chomp; #默认去掉$_后的换行符print "I saw $_\n";}调用:./io io #读取“文件io”到标准输入流
3)标准参数(@ARGV,我们可以修改它)
调用: ./io sub默认参数存放到@ARGV 中,<STDIN>依次读取@ARGV中的数据
4)标准输出(<STDON>)
print("out print str"); #输出到标准输出流print "out print str"; #简写,去掉括号print (2+4)*4; #print (2+4)输出成功返回1,再乘4printf "hello , %s; in %d days!\n" ,"gbz" , 3;
printf "%g %g %g \n" , 5/2 , 31/17 , 22**33; #数字原样输出
printf "截断,只保留整数部分 %d \n" , 22.334;
printf "||%d||%-6d||\n" , 33 , 55; #正6左补空格,负6右补空格
printf "||%12.3f||\n" , 43.23525; #保留3位小数
printf "%.2f%%\n" , 22.45; #百分号use 5.010;say "gbz" ; #自动换行功能my @list = qw (22.34 11.542 11.667);
printf "the items are:\n" . ("%10.1f\n" x @list), @list; #相当于%10.1f\n%10.1f\n%10.1f\n#("%10.1f\n" x @list) 标量上下文,@list为元素个数
     5)文件句柄
    命名:一般大写
      打开文件的方式 :
      open CONFIG, 'io'; #读写方式打开文件,使用CONFIG访问 
open CONFIG, '<io';
while (<CONFIG>){
chomp;
print $_;
}
改变输出句柄:
open my $log_fh, '>','io.txt' or die "error : $! \n"; #打开文件,有错误会报错
print {$log_fh} "gbz"; #输入到文件中
while (<$log_fh>){ #读取,'>' 换成 ‘<’
chomp;
print $_;
}
perl 学习笔记的更多相关文章
- Perl 学习笔记-标量数据
		
最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...
 - Perl 学习笔记-高级控制结构
		
1.unless控制结构 类似于独立的else语句; 要么条件为真, 要么执行语句块内的代码; unless(<condition>){code...;} 等价于 if(<con ...
 - Perl 学习笔记-列表和数组
		
笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...
 - perl学习笔记
		
一.正则表达式 匹配一个文件中的某个单词,并打印出来 #!/usr/bin/perl use strict; use warnings; ; open(FILE, "< temp.pl ...
 - perl学习笔记(4)——动态加载
		
在写perl的时候,如果要应用到各种平台的话,比如linux 和windows,会遇到各种问题,有时就是要根据系统类型来加载各种库,之前写的就是这样的, if($^O eq 'linux'){ use ...
 - perl学习笔记(3)—— 坑
		
(1)用perl来ls一个目录: 写perl的时候,经常要调用到系统命令,perl有很多等价的函数可以用,但是,不小心任性了,就想用system来实现了,好吧,来个ls把,列出指定的一个目录,直接上代 ...
 - perl学习笔记(2)
		
1)记得刚开始写perl的时候,对于一个功能,总是拿目前能用的数据类型来解决问题,不想想有没有更好的,能用能解决问题就好,这就导致了后期,要在函数里面添加功能的时候,函数要添加很多参数,一个函数有7. ...
 - 【Perl学习笔记】2. perl中的bless理解
		
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...
 - 【Perl学习笔记】1.perl的ref 函数
		
perl有引用的概念:一组数据实际上是另一组数据的引用.这些引用称为指针,第一组数据中存放的是第二组数据的头地址.引用的方式被用得相当普遍,特别是在面向对象的模块.函数的参数传递等常见.但perl对每 ...
 
随机推荐
- FreeMarker---数据类型
			
1.a.ftl 你好,${user},今天你的精神不错! ----------------------------- 测试if语句: <#if user=="老高"> ...
 - BeanFactory调用getbean()对象
			
Spring通过资源加载器加载相应的XML文件,使用读取器读取资源加载器中的文件到读取器中,在读取过程中,解析相应的xml文件元素,转化为spring定义的数据结BeanDefinition,把相应的 ...
 - (转)Linux整合apache和tomcat构建Web服务器
			
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wenzhongxiang.blog.51cto.com/6370734/1285 ...
 - .NET基本权限管理框架源代码
			
有兴趣的朋友欢迎加群讨论:312677516 1.菜单导航管理 2.操作按钮 3.角色管理 4.部门管理 5.用户管理(用户权限) 6.用户组管理(设置成员,用户组权限) 7.系统配置(动态配置系统参 ...
 - Android中Context具体解释 ---- 你所不知道的Context
			
...
 - 关于IE6幽灵字体
			
前言:今天做项目的时候在IE6下出现了这样的一种现像,这种情况只在IE6下出现,最后在网友的帮助下这个问题最终得到了解决.所以马上作了下笔记! 情况如下图: 我在网上找了点资料出现IE6下幽灵字体的情 ...
 - django: db - many to many
			
本讲介绍数据库多对多关系,代码样例继前文使用. 一,在 blog/models.py 中创建对象: # Many-To-Many Example : Authors vs Books class Au ...
 - 读取oracle页面或者进程卡住不动(死锁)
			
oracle最坑爹的地方:你insert update delete之后 或者kill死锁的时候记得一定要提交事务不然就是死锁卡在那里了 记住 kill死锁也是要提交事务的 select * ...
 - SQL Server 中创建数据库、更改主文件组示例
			
以下示例在 SQL Server 实例上创建了一个数据库.该数据库包括一个主数据文件.一个用户定义文件组和一个日志文件.主数据文件在主文件组中,而用户定义文件组包含两个次要数据文件.ALTER DAT ...
 - MongoVUE查询备忘
			
用了一段时间的MongoVUE,把一些在MongoVUE中常用的查询记录一下,以便查阅.1.and查询 查询date等于2016-01-08,并且page_url等于shouye.html ...