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对每 ...
随机推荐
- 集成容联:Warning! ivar size mismatch in PSUICollectionView_ - can't change the superclass.解决办法
这个警报其实是无影响的. 解决方案: PSTCollectionView.m 的 char filler[200] 替换成char filler[300]
- UUID.randomUUID()方法介绍
UUID.randomUUID().toString()是javaJDK提供的一个自动生成主键的方法.UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机 ...
- 我对Laravel ThinkPHP Yii symfony2 CI cakephp 的看法
这是我的真心体会,在尝试使用Laravel.ThinkPHP.Yii.symfony2.CI.cakephp.Yii2 之后的真实想法(default7#zbphp.com). 1)ThinkPHP ...
- C语音指针Introduction.
指针是C语言中广泛使用的一种数据类型. 运用指针编程是C语言最主要的风格之一.利用指针变量可以表示各种数据结构: 能很方便地使用数组和字符串: 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序 ...
- Freemarker常用技巧(一)
1 截取字符串有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的例子就可以自定义显示的长度<#if title.content?length lt 8> ...
- 从客户端检测到有潜在危险的Request.Form值
1.带有html标记内容提交(使用web编辑器): js: <script type="text/javascript"> //简单模式 var editor; Kin ...
- C# List<T>转为 DataTable
// remove "this" if not on C# 3.0 / .NET 3.5 public static System.Data.DataTable ConvertTo ...
- String.PadLeft - 格式对齐
语法:public string PadLeft( int totalWidth, char paddingChar ) 概述,实现的效果是右对齐,返回一个总长度为 totalWidth,如果实际长度 ...
- vsftpd安装、多用户配置
1.vsftpd安装 rpm -ivh vsftpd 2.2.2 11.el6_4.1.x86_x64.rpm 2.添加ftp用户 添加ftp用户组 groupadd ftpg 添加ftp用户 use ...
- [转]Swift编程风格指南
语言 使用美式英语拼写以匹配苹果公司的API 优选: var color = "red" 不建议使用: var colour = "red" 间隔 使用2个空格 ...