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对每 ...
随机推荐
- WPF Customize TabControl
有篇很好的文章 http://www.blogs.intuidev.com/post/2010/01/25/TabControlStyling_PartOne.aspx 详细介绍了如何Customiz ...
- 白话C#:特性(转)
不管怎么样,转过来再说. http://www.kuqin.com/dotnet/20080628/10196.html 系列文章索引:<白话C#> 首先要说的是,可能一些刚接触C#的朋友 ...
- spring + shiro + cas 实现sso单点登录
sso-shiro-cas spring下使用shiro+cas配置单点登录,多个系统之间的访问,每次只需要登录一次,项目源码 系统模块说明 cas: 单点登录模块,这里直接拿的是cas的项目改了点样 ...
- javadoc简介
Javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档.也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Java ...
- Android源代码之Gallery专题研究(2)
引言 上一篇文章已经解说了数据载入过程,接下来我们来看一看数据载入后的处理过程.依照正常的思维逻辑.当数据载入之后,接下来就应该考虑数据的显示逻辑. MVC显示逻辑 大家可能对J2EE的MVC架构比較 ...
- 使用awrextr.sql导出awr原始数据
1.AWR原始数据与AWR报告的差别 AWR原始数据: 是oracle数据库mmon进程定期将统计量从内存转储至磁盘,并以结构化的形式存入若干张表组成自己主动工作负荷存储仓库(AutomaticWor ...
- LF will be replaced by CRLF问题解决方法
[GIT] warning: LF will be replaced by CRLF问题解决方法 开发环境: 操作系统: windows xp ruby 1.9.2 rails 3.1.3 git v ...
- Java中的Switch用法
一.java当中的switch与C#相比有以下区别 注:在java中switch后的表达式的类型只能为以下几种:byte.short.char.int(在Java1.6中是这样), 在java1. ...
- Node.js 实现简单小说爬虫
最近因为剧荒,老大追了爱奇艺的一部网剧,由丁墨的同名小说<美人为馅>改编,目前已经放出两季,虽然整部剧槽点满满,但是老大看得不亦乐乎,并且在看完第二季之后跟我要小说资源,直接要奔原著去看结 ...
- Carthage使用(cocoapods的替代)
1.使用homebrew安装Carthage brew intsall carthage Ps:没有安装Homebrew的话,进入传送门Homebrew.顺便提一句可以选择简体中文啊. 2.进入 ...