Perl学习笔记
- 格式:pdf
- 大小:389.74 KB
- 文档页数:63
Perl的经典用法<编者按:本月的专栏文章将介绍一些Perl的经典用法,以便帮助你创建短小精悍,可靠性更高的程序>perl复制文件夹use File::Copy qw(cp);cp"/dira/dfsdf","/dirb/sdfsdf/dddddd";我用system('cp source target'),如果我把程序移植到WINDOWS能否正确运行?use File::Copy;copy($original,$new_copy)or die"Copy failed:$!";学Perl有几本书要常备:1.Programming Perl2.Perl Cookbook3.Perl FAQ打印数据的方法:一:print"@array\n";二:for$row(@array){print"@$row\n";}三:for$row(0..$#array){print"row$row is:@{$geno_sample[$row]}\n";}用Open()函数打开文件打开文件的常用方法是:open(FH,"<$filename")or die"Couldn't open$filename for reading:$!";open()函数通常带有两个参数,第一个为文件句柄,用于指向打开的文件,第二个参数是文件名及模式(文件的打开模式)的混合体,如果文件被成功打开,open()函数返回true,否则为false。
我们用“or”来测试该条件。
上述代码中的模式由小于字符(<)来表示。
如果文件不存在,open()将返回false。
此时,你可以读文件句柄,但不可以写。
大于字符表示写。
如果文件不存在,就会被创建。
如果文件存在,文件被清除,以前的数据将会丢失。
perl基本语法Perl 基本语法by Jian Lee最近在研究openSUSE 的OBS (编译系统),其中很多部分用到Perl。
而且自己也感到有必要学点Perl,当有一点其他程序语言的基础,再学一门语言,入门还是非常简单的。
Perl 在 GNU/Linux 上应用如此广泛,很多地方替换 shell 脚本会更灵活优秀高效,学习它也很有必要。
本文是学习时的笔记,多是语法使用示例,没有什么说明。
拟研究 OBS 时,依据某个应用再写一篇 Perl 应用教程。
标量数字字符串数字和字符串之间的自动转换Perl 内嵌的警告标量变量print 输出if 控制结构Boolean 值用户的输入 <STDIN>chomp 操作while 控制结构undef 值defined 函数列表和数组qw 简写列表赋值pop 和 push 操作shift 和 unshift 操作字符串中引用数组foreach 控制结构最常用的默认变量: $_ reverse 操作sort 操作标量和列表上下文子程序使用 sub 定义子程序调用子程序参数my 变量使用 strict Pragma省略 &输入和输出从标准输入设备输入从 <> 输入调用参数输出到标准输出设备使用 printf 格式化输出数组和 printf句柄(即文件描述符)文件句柄的打开Bad 文件句柄关闭文件句柄严重错误和 die使用文件句柄哈希什么是哈希哈希元素的存取哈希函数正则表达式简单的模式正则表达式的应用使用 m// 匹配可选的修饰符锚定匹配变量使用正则表达式处理文件使用 s/// 进行替换split 操作join 函数列表上下文中的 m//更强大的正则表达式更多控制结构unless 控制结构until 控制结构表达式修饰符The Naked Block 控制结构elsif 语句自增和自减 (同C)for 控制结构 (同C)循环控制逻辑操作符 && 和 ||文件校验文件检测操作stat 和 lstat 函数localtime 函数位操作目录操作在目录树上移动GlobbingGlobbing 的替换语法目录句柄删除文件 unlink重命名文件链接文件创建和删除目录修改权限改变所有者改变时间戳字符串和排序使用索引寻找子串使用 substr 操作子串使用 sprintf 格式化数据进程管理system 函数exec 函数环境变量使用反引号得到输出像文件句柄一样处理进程fork 函数发送和接受信号Perl 模块查找安装模块使用简单的模块一些高级的 Perl 技术利用 eval 捕捉错误标量标量是Perl 中最简单的数据类型。
一.数据类型(Data type)Perl 的数据类型大致分为四种:Scalar(变量)、Scalar Array(数组)、Hash Array(散列)、References(指针),看起来虽少但用起来却绰绰有余。
尤其在写Perl程序时可以不必事先宣告变量,这一点对刚学程序语言的人甚为方便,不过为了以后程序除错和维护方便,我建议你还是养成事先声明变量的习惯比较好。
1 Scalar(纯量变量)纯量变量是Perl里最基本的一种数据型态,它可以代表一个字符、字符串、整数、甚至浮点数,而Perl把它们都看成是一样的东东! 你甚至可以混着用,不可思议吧。
例如:# 井字号开头的后面都是批注。
# 纯量变数以$开头。
# my 是一种宣告变量的方式,它可以使变量区域化。
# 宣告变量时若不加my 或local 则Perl会把它当作全域变量使用。
# 习惯上,我们会将字符串用双引号括起来,而数值就不用加引号。
my $x="abc";my $x=123;my $x=4.56;1、算术运算符+(加)、-(减)、*(乘)、/(除)、**(幂)、%(余)、-(负)(1)求幂(**)结果不能超出数的范围。
当指数为小数时,底数不能为负数,例如:25**1.5=125,(-25)**1.5=?(不成立)(2)取余(%)操作数为整数,否则要截取。
第二个数不能为0(因为除数不能为0)(3)负(-)-$a=$a*(-1)此外,注意当一个字符串参加运算,需要转化为整数时,如果不能转化为整数则值为0。
例如:'2'+1=3,'a'+1=12、数字比较运算符<(小于)、=(等于)、>(大于)、==(等于)、<=(小于等于)、>=(大于等于)、!=(不等于)、<=>(比较)(1)==:比较运算,比较的结果为真或非零,假或零(2)<=>:比较运算例如:$a<=>$b,当$a>$b时,值为1;当$a<$b时,值为-1;当$a==$b时,值为0(3)自动把操作数转化为整数,不能转化为整数则为0(4)浮点数不精确,不要把值相近的数比较,否则得到的结果是出乎意料的3、字符串比较运算符lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(等于)、cmp(比较)(1)字符串的比较原则:按照字母表的顺序比较,数字<大写字母<小写字母(a小—z大)(2)字符串比较的次序:字符串从左到右比较。
R语言入门R是开源的统计绘图软件,也是一种脚本语言,有大量的程序包可以利用。
R中的向量、列表、数组、函数等都是对象,可以方便的查询和引用,并进行条件筛选。
R具有精确控制的绘图功能,生成的图可以另存为多种格式。
R编写函数无需声明变量的类型,能利用循环、条件语句,控制程序的流程。
R网络资源:R主页:R资源列表NCEASR Graphical Manual统计之都:QuikR丁国徽的R文档:R语言中文论坛一、用函数install.packages(),[直接输入就可以联网,第一次的话之后选择镜像,然后选择包下载即可]如果已经连接到互联网,在括号中输入要安装的程序包名称,选择镜像后,程序将自动下载并安装程序包。
例如:要安装picante包,在控制台中输入install.packages("picante")已经安装了?二. 安装本地zip包路径:Packages>install packages from local files选择本地磁盘上存储zip包的文件夹。
(文件,运行R的脚本,选择所在文档)三.调用程序包在控制台中输入如下命令library(“picnate”)程序包内的函数的用法与R内置的基本函数用法一样。
四.程序包内部都有哪些函数?分别有什么功能?查询程序包内容最常用的方法:1 菜单帮助>Html帮助;2 查看pdf帮助文档五.查看函数的帮助文件函数的默认值是什么?怎么使用?使用时需要注意什么问题?需要查询函数的帮助。
1 ?t.test 直接打开相关函数的说明和使用模板。
2 RGui>Help>Html help 同样的效果,同上3 apropos("t.test")合理使用T 检验,五种模式的T 检验4 help("t.test")帮助同1-25 help.search("t.test")有关T 检验的一切东西都可以查出来。
perl usage用法Perl 是一种通用的脚本编程语言,易于学习和使用。
它在文本处理和系统管理方面非常强大,被广泛应用于日志分析、网页抓取、网络编程、数据库操作等各种领域。
本文将一步一步地回答关于Perl 用法的问题,为读者提供详细的指导和实例。
1. 什么是Perl?Perl(Practical Extraction and Reporting Language)是由Larry Wall 在1987 年开发的一种通用的脚本编程语言。
它具有强大的文本处理能力,灵活易用,被广泛认可为解决实际问题的工具。
2. 如何安装Perl?Perl 可以在多种操作系统上安装和运行,包括Windows、MacOS 和各种Linux 发行版。
可以从Perl 官方网站(Perl 解释器,并按照官方文档中的指引进行安装。
3. 如何编写Perl 程序?Perl 程序的文件扩展名通常为`.pl`。
使用文本编辑器创建一个新文件,然后在文件中输入Perl 代码。
Perl 代码以`#!/usr/bin/perl` 开始,表示这是一个Perl 程序。
可以在程序中使用注释(以`#` 开头)来增加代码的可读性。
4. 如何输出文本内容?在Perl 中,可以使用`print` 函数来输出文本内容。
例如,`print "Hello, World\n";` 将输出`"Hello, World"` 至标准输出。
其中`\n` 表示换行符。
5. 如何从用户获取输入?Perl 中获取用户输入可以使用`<>` 运算符。
例如,`input = <>;` 将获取用户输入,并将该输入保存到变量`input` 中。
6. 如何进行字符串处理?Perl 提供了丰富的字符串处理函数和操作符。
其中包括字符串连接符(`.`)、字符串重复操作符(`x`)、提取子字符串函数(`substr`)、字符串替换函数(`s/`)等。
perl语言基本命令Perl语言是一种功能强大的脚本语言,可以用于处理文本、执行系统命令以及开发Web应用等。
本文将介绍一些Perl语言的基本命令和用法。
一、输出命令1. print:用于输出字符串或变量的值。
例如:```print "Hello, Perl!\n";```2. say:与print类似,但会自动换行。
例如:```say "Hello, Perl!";```3. printf:按照指定格式输出字符串或变量的值。
例如:```my $name = "Alice";my $age = 20;printf "Name: %s, Age: %d\n", $name, $age;```二、变量命令1. my:用于声明一个局部变量。
例如:```my $name = "Bob";```2. our:用于声明一个全局变量。
例如:```our $count = 0;```3. scalar:将数组或哈希转换为标量。
例如:```my @numbers = (1, 2, 3);my $count = scalar @numbers;```4. chomp:去除字符串末尾的换行符。
例如:```my $str = "Hello, Perl!\n";chomp $str;```三、输入命令1. <STDIN>:用于从标准输入读取用户输入的数据。
例如:```print "Please enter your name: ";my $name = <STDIN>;chomp $name;print "Hello, $name!\n";```2. getc:从标准输入读取一个字符。
例如:```print "Please enter a character: ";my $char = getc;print "You entered: $char\n";```四、控制流命令1. if-else:用于条件判断。
Perl 是一种功能强大的编程语言,具有灵活的语法和广泛的应用领域。
以下是Perl 的基础语法:变量:Perl 使用符号来标识变量,例如name、$age。
变量可以是数字、字符串等数据类型。
数组:Perl 中的数组使用@ 符号来标识,例如@names。
数组可以包含多个元素,通过索引访问特定元素,例如$names[0]。
哈希表:Perl 中的哈希表使用% 符号来标识,例如%person。
哈希表是一种键值对的数据结构,可以通过键来访问对应的值,例如$person{'name'}。
控制结构:Perl 支持常见的控制结构,如if-else、while、for 循环等。
条件语句使用if 关键字,循环语句可以使用while 或for 关键字。
函数:Perl 中的函数使用sub 关键字定义,例如sub sayHello { print "Hello, World!\n"; }。
调用函数时,可以直接使用函数名加参数列表,例如sayHello()。
正则表达式:Perl 是正则表达式的强大工具,可以使用正则表达式进行模式匹配和文本处理。
正则表达式的模式使用// 包围,例如/hello/。
文件操作:Perl 提供了丰富的文件操作功能,可以打开、读取、写入文件等。
文件操作可以使用内置的文件句柄或自定义文件句柄。
模块和包:Perl 支持模块化编程,可以将代码拆分成不同的模块和包,提高代码的可重用性和可维护性。
模块和包可以使用use 或require 关键字引入。
这些是Perl 的基础语法概述,当然Perl 还有更多高级特性和用法等待你去探索和学习。
水木社区(展开完整界面) → Perl的世界→ 精华区文章阅读Perl 版 (精华区)发信人: sisoe (游刃), 信区: Perl标题: perl/tk教程发信站: BBS 水木清华站 (Tue Aug 29 12:23:44 2000)perl/tk 教程浦绍忠前言perl/tk 在图形界面、表框设计、菜单设计等方面功能强大,对字体、颜色和绑定使用灵活,容易上手。
本教程写作原则:简洁明了地介绍 perl/tk 的功能及其使用,对功能的使用一般只介绍一种方法,其余方法由读者自己实践。
对于perl/tk的常用功能及其使用给以相应的例子,为突出选项的作用,在例子中有时不是遵循美学原则,得到漂亮的界面,而是使用一些夸张的选项值。
教程的介绍对象是 perl/tk 402.002 版本,使用Windows 序列操作系统,本教程中全部例子都在 Windows95,Windows98 下试验通过。
讲解 perl/tk 基本组件,基本使用方法,对 perl/tk 的扩展模块不作说明,由读者自己去学习掌握。
假定读者已掌握 perl 基础知识,对例子中用到的perl基础知识不作讲解。
第一章 perl/tk 概要说明一。
perl/Tk的取得从多个网站上可以取得perl/Tk, perl/Tk的安装需要C++的编译器。
Gurusamy Sarathy 已经为使用 Intel 芯片的机器在 NT 上安装了最常用模块的tar 文件,压缩文件大约有6M,安装后大约有24M,安装后就可以在 Windows 系列系统下使用 Perl/Tk。
为便于下载,你可以从国内网站"http://ftp.freesoft./pub/languages/perl/CPAN/modules/by-authors/id/GSAR/"取得Gurusamy Sarathy 安装好的 perl5.00402-bindist04-bc.zip文件。
第六章tangyurong@主要内容6.1 数据库介绍6.2 MySQL数据库基本使用方法 6.3 DBI概述和运用6.4 DBI工具函数6.5 ODBC和DBD编程实例6.1 数据库介绍1.数据库管理系统(DBMS)嵌入式数据库面向对象数据库层次型数据库关系型数据库关系型数据库z Microsoft SQL Serverz Oraclez Sybasez DB2z Informixz MySQLz Microsoft Access2.关系数据库模型数据结构一个关系模型的逻辑结构是一张二维表,它由行和列组成。
表中的一行即为一个元组;表中的一列即为一个属性。
存储结构关系数据模型中,实体及实体间的联系都用表来表示。
在数据库的物理组织中,表以文件形式存储,每一个表通常对应一种文件结构操作及完整性约束z关系数据模型的操作主要包括查询、插入、删除和更新数据。
这些操作必须满足关系的完整性约束条件。
z关系模型中的数据操作是集合操作,操作对象和操作结果都是关系,即若干元组的集合。
z关系模型把存取路径向用户隐蔽起来,用户只要指出“干什么”,不必详细说明“怎么干”,从而大大地提高了数据的独立性。
关系数据库基本结构一个数据表列3.关系数据模型的优缺点优点:z关系模型是建立在严格的数据概念的基础上的。
z无论实体还是实体之间的联系都用关系来表示。
对数据的检索结果也是关系(即表),因此概念单一,其数据结构简单、清晰。
z关系模型的存取路径对用户透明,从而具有更高的数据独立性,更好的安全保密性,也简化了程序员的工作和数据库开发建立的工作。
缺点:z由于存取路径对用户透明,查询效率往往不如非关系数据模型。
因此为了提高性能,必须对用户的查询请求进行优化。
4. 关系数据库语言SQL 是一种结构化查询语言 类似于人类语言,而不是计算机语言 大多数SQL实现都是不区分大小写的)注意:指的是关键字不区分一些SQL查询命令SQL命令SELECT FROM WHERE ORDER BY INSERT UPDATE说明从一个表中或多个表中选择(取回)字段 指定从哪个表中取得字段 指定选择数据记录的标准 指定记录的排列标准 把值插入一个或多个表里 更新一个或多个表里的数据6.2 MySQL数据库基本使用方法1. 连接MySQL数据库服务器 2. MySQL基本SQL命令介绍1. 连接MySQL数据库服务器条件z 客户端:基于Windows操作系统 z 远程服务器:基于Linux/Unix操作系统步骤:1. 登录Linux/Unix服务器 方法:通过SSH程序,输入host name、user name和password后 即可进入2. 登录MySQL数据库 方法:进入MySQL所在的目录后,键入: $mysql –u username –p password3. 进入MySQL的提示符为: mysql>在提示符后键入各种SQL命令,并以分号结束4. 退出MySQL mysql>quit2.MySQL基本SQL命令介绍SQL命令数据库命令 数据表命令 记录命令 ① 数据库命令建立数据库 CREATE DATABASE 数据库名; 显示数据库 SHOW DATABASES; 打开数据库 USE 数据库名; 注:在此分号可以省略删除数据库 DROP DATABASE 数据库名;② 数据表命令建立数据表CREATE TABLE (field-name-1 field-name-2 …, field-name-n );字段名数据表名 field-type-1 modifiers, field-type-2 modifiers, field-type-n modifiers字段类型修饰符注:表的名字中不能包含空格、斜线和句号,除此之外,任何字符都是允许的字段类型说明:CHAR (M )保存最大长度不超过255个字符的字符串类型VARCHAR (M )最大长度为65535个字符的字符串类型TEXT最大长度为216个字符的字符串类型指定该数据所需使用的长度或位数CHAR、VARCHAR、TEXT区别:1.数据的检索效率是:CHAR>VARCHAR>TEXT2.CHAR在保存的时候,后面(右边)会用空格填充到指定的长度,在检索的时候后面的空格会去掉,所以检索出来的数据需要再用什么trim之类的函数去处理。
Perl学习笔记之:数组哈希嵌套当然它也有它的“缺点”,至少我认为不太方便的地方就是:Perl对于数组的处理。
它将以数字为索引的数组称为数组(Array),以具体键名索引的数组称为哈希(Hash)。
其实这两个东西的本质是一样的,数组就是一种特殊的哈希,它的键名就是自动递增的自然数。
而在PHP里,只有数组的概念,并且无论是循环还是取值都很灵活。
所以这一点,我感觉Perl分的有点细,并且在多维数组(哈希)甚至嵌套数组(哈希)处理方面有些繁琐。
我认为,这种多维数组或嵌套数组的建立以及循环取值,是一门编程语言的核心。
只有你能熟练的运用多维或嵌套数组获取和输出数据,才能称的上对这门语言融会贯通。
数组哈希嵌套有些麻烦,查找资料后解决。
这里记录下要点:先是数组嵌套哈希:my %hash = (one => 1, two => 2, three => 3);my @array = (I, II, III);#赋值与取值:{%hash}表示复制哈希值放入数组,\%hash则表示引用哈希值,意味着此哈希若更改,数组中的哈希也会相应更改push @array, {%hash};print $array[-1]{one};然后是哈希嵌套数组:my %hash = (one => 1, two => 2, three => 3);my @array = (I, II, III);#赋值与取值:[@array]表示复制数组值放入哈希,\@array则表示引用数组值,意味着此数组若更改,哈希中的数组也会相应更改$hash{four} = [@array];print $hash{four}[0];$hash{'orange'}{'red'} = 'red orange';其实相当于执行了:$str = 'red orange';$rstr = $str;$rhash->{'red'} = $rstr;$hash->{'orange'} = $rhash;所以我们如下打印多重hash的嵌套:$hash{'orange'}{'red'} = 'red orange';$hash{'orange'}{'green'} = 'green orange'; $hash{'apple'}{'red'} = 'red apple';$hash{'apple'}{'green'} = 'green apple';foreach $fruit (keys %hash){foreach $color (keys %{$hash{$fruit}}){print $hash{$fruit}{$color},"\n";}}。
1. 获取用户输入:2. chomp操作符作用:去除字符串后面的换行符3. 注释:# 注释4. 数组的最后一个值的索引:在变量中加一个#所以数组的个数就是$#rock + 15. 列表赋值6. 创建数组:@name引用的时候:$name[]数组的赋值:7. 数组尾部操作:Push和pop数组头部操作:Unshift(插入)和shift(取出)8. splice操作符可以对数组中的任意位置进行插入和删除操作。
它可以接受4个变量第一个变量是数组名,第二个变量是起始索引,第三变量是长度,第四个变量是补充数组。
二个参数:删除后面全部三个参数,设定删除的长度:四个参数:设定插入的东西9. 标量内插到字符串中:数组也可以内插到字符串中,在内插过程中,会添加空格10. foreach使用默认值,不使用变量:11. reverse操作符:用于将次序变反12. sort操作符用于对数组进行排序13. 对数组使用each操作符:Each可以用于提取哈希的键值,这样也同时可以提取数组的序号和数值。
use 5.012;这样写主要是想用 say如果不用each,需要实现的过程如下:14. 上下文:所谓上下文就是返回的值是根据需要进行返回的。
15清空数组:15. 子程序定义:sub name {};调用子程序:&+子程序名如果我们不写return,照样可以返回,主要是这样写除了返回,没有任何意义。
如果没有明显返回值,就是返回1传递参数:在子程序调用的时候,可以直接写参数,系统会自动将自动将参数保存到$_[]数组中,然后在子程序中可以直接调用$_[0],$_[1]来获得参数。
16. 子程序的私有变量My +定义私有变量用my定义的私有变量可以用在很多地方,比如在for循环中的i我们就可以定义为局部私有变量。
17. use strict可以使的Perl更加严格这不报错,但这就报错,报出的错误是:也就是说不能轻易的用全局变量,应该像上面那样用my修饰,或者是因为你写错了,应该用上面那个已经定义过的变量。
Perl语言入门教程Perl语言入门教程引言Perl是一种非常简单、应用广泛且反响很好的脚本语言。
它可用于各种任务(例如,您可以使用它创建DOS批处理文件或C外壳脚本的等效文件),但在网络开发环境中,它用于开发CGI脚本。
由于Perl是一种脚本语言,所以使用它的一个好处就是可以分发程序的源代码。
这就为您提供了学习Perl的机会,您也可以下载和修改数千个Perl脚本,以供自己使用。
Perl的缺点之一就是,多数的免费代码都难以理解。
这使Perl自身成了一种神秘的语言类型!本文假定您已经知道如何编程(如果您了解C编程语言,这对您将非常简单)。
一旦掌握了有关Perl的基础知识,使用起来就会非常简单。
在本文中,我们将首先介绍如何使用Perl 执行最常见的编程任务。
阅读本文后,您将可以相对轻松地编写自己的Perl脚本,还可以轻松地读取其他人编写的含义模糊的脚本,这将是一个好的开始。
Perl语言入门指南要启用Perl,您需要有Perl解释程序。
在任何装有UNIX的计算机上,99.99%的都已安装了Perl解释程序。
在装有Windows或Mac计算机上,您需要下载最新的语言版本并将其安装到计算机上。
您可从网上轻松下载Perl,并且是免费的。
接下来,请确保查看Perl附带的DOCS目录,其中会有类似用户手册的资料。
从某种意义上说,读完所有文档,或只是先浏览一下都会很有帮助。
最初会觉得很麻烦,但在读完本文后,您将获得更多的认识。
输出字符“Hello World”如果您已加载了Perl,请确保已正确设置了路径以包含Perl 的可执行文件。
然后,打开文本编辑器并创建一个文本文件。
在文件中,输入以下行:print "Hello World!n";将文件命名为“test1.pl”。
在命令提示符下键入:perl test1.plPerl将运行并执行文本文件中的代码。
您应该会看到词语“Hello World!”打印到标准输出中。
Perl学习笔记廖海仁2010年5月目录1.Perl简介 (4)2.数据类型 (5)2.1概览 (5)2.2命名空间(Namespaces) (5)2.3标量(Scalars) (6)2.4数组(Arrays) (9)2.5关联数组(Hashes) (12)2.6引用(References) (13)2.6.1 Perl引用简介 (13)2.6.2 创建引用 (13)2.6.3 使用引用 (14)2.6.4 符号引用 (15)2.6.5 垃圾回收与弱引用 (16)2.7数据结构 (16)2.7.1Arrays of Arrays (17)2.7.2Hash of Arrays (19)2.7.3Arrays of Hashes (21)2.7.4Hashes of Hashes (23)2.7.5Hashes of Functions (25)3操作符(Operators) (25)3.1 概述 (25)3.2 Perl操作符一览 (26)3.3 各种操作符使用说明 (27)3.3.1 项与左赋列表操作符 (27)3.3.2 箭头操作符 (28)3.3.3 自增自减 (28)3.3.4 乘方 (28)3.3.5 表意一元操作符 (28)3.3.6 捆绑操作符 (29)3.3.7 乘操作符 (29)3.3.8 加操作符 (29)3.3.9 移位操作符 (29)3.3.9 有名一元和文件测试操作符 (30)3.3.10 关系操作符 (31)3.3.11 位操作符 (32)3.3.12C风格逻辑操作符 (32)3.3.13 范围操作符 (32)3.3.14 条件操作符 (32)3.3.14 赋值操作符 (33)3.3.15 逗号操作符 (33)3.3.16 逻辑and, or, not和xor操作符 (33)3.4 与C操作符的比较 (34)3.4.1 Perl操作符的特别之处 (34)3.4.1 C有Perl没有的操作符 (34)4.语句 (34)4.1简单语句 (34)4.2复合语句 (35)4.2.1 条件语句(if/unless语句) (35)4.2.2循环语句(while/until/for/foreach语句) (36)4.2.3分支语句 (38)5.子程序(函数) (39)5.1子程序简介 (39)5.2 函数原型与属性 (41)5.3 Perl内部函数 (42)6. 文件、目录与I/O (43)6.1文件操作 (43)6.2 目录操作 (44)6.3 print/printf (45)6.4 注意事项 (45)7.模式匹配 (46)7.1模式匹配操作符简介 (46)7.2模式修饰符 (48)7.3模式匹配操作符详解 (49)7.3.1 m//操作符(匹配) (49)7.3.2 s///操作符(替换) (50)7.3.3 tr///操作符(字译) (52)7.4元字符 (52)7.5常见问题的正则解决方案 (56)8.面向对象编程 (56)8.1模块使用 (56)8.2对象使用 (57)9.Perl特殊变量 (58)10 Perl程序文档(POD) (60)11. Perl编程风格 (61)12. 参考文献 (63)1.Perl简介Perl一般被认为是Practical Extraction and Report Language(实用获取与报表语言)的缩写,是由C以及sed、awk、Unix shell及其它语言演化而来的一种语言。
Perl语言编程目录第一章 Perl概述 (10)1.1 从头开始 (10)1.2 自然语言与人工语言 (11)1.2.1 变量语法 (12)1.2.2 单数变量 (13)1.2.3 复数变量 (14)1.2.4 复杂数据结构 (17)1.2.5 简单数据结构 (19)1.2.6 动词 (21)1.3 一个平均值例子 (22)1.3.1 如何运行 (24)1.4 文件句柄 (26)1.5 操作符 (28)1.5.1 双目算术操作符 (28)1.5.2 字符串操作符 (28)1.5.3 赋值操作符 (29)1.5.4 单目算术操作符 (31)1.5.5 逻辑操作符 (32)1.5.6 比较操作符 (33)1.5.7 文件测试操作符 (33)1.6 流程控制 (34)1.6.1 什么是真 (34)1.6.2 If 和 unless 语句 (35)1.6.3 循环 (36)1.6.3.1 while 和 until 语句 (36)1.6.3.2 for 语句 (38)1.6.3.3 foreach 语句 (38)1.6.3.4 跳出控制结构: next 和 last (39)1.7 正则表达式 (40)1.7.1 量词 (43)1.7.2 最小匹配 (44)1.7.3 把钉子敲牢 (44)1.8 列表处理 (46)1.9 你不知道但不伤害你的东西(很多) (47)第二章集腋成裘 (48)2.1 原子 (48)2.2 分子 (49)2.3 内置的数据类型 (51)2.5 名字 (53)2.5.1 名字查找 (55)2.6 标量值 (57)2.6.1 数字文本 (58)2.6.2 字串文本 (59)2.6.3 选择自己的引号 (62)2.6.4 要么就完全不管引起 (63)2.6.5 代换数组数值 (64)2.6.6“此处”文档 (65)2.6.7 V-字串文本 (67)2.6.8 其他文本记号 (68)2.7 环境 (69)2.7.1 标量和列表环境 (69)2.7.2 布尔环境 (70)2.7.3 空(void)环境 (71)2.7.4 代换环境 (71)2.8 列表值和数组 (72)2.8.1 列表赋值 (75)2.8.2 数组长度 (76)2.9 散列 (77)2.10 型团(typeglob)和文件句柄 (79)2.11 输入操作符 (80)2.11.1 命令输入(反勾号)操作符 (80)2.11.2 行输入(尖角)操作符 (81)2.11.3 文件名聚集操作符 (84)第三章单目和双目操作符 (86)3.1 项和列表操作符(左向) (89)3.2 箭头操作符 (91)3.3 自增和自减操作符 (91)3.4 指数运算 (92)3.5 表意单目操作符 (92)3.6 绑定操作符 (93)3.7 乘号操作符 (94)3.8 附加操作符 (95)3.9 移位操作符 (95)3.10 命名单目操作符和文件测试操作符 (96)3.11 关系操作符 (100)3.12 相等操作符 (101)3.13 位操作符 (101)3.14 C 风格的逻辑(短路)操作符 (102)3.15 范围操作符 (103)3.16 条件操作符 (105)3.16 赋值操作符 (107)3.19 列表操作符(右向) (110)3.20 逻辑与,或,非和异或 (110)3.21 Perl 里没有的 C 操作符 (111)第四章语句和声明 (111)4.1简单语句 (112)4.2混合语句 (113)4.2.1 if 和 else 语句 (115)4.3 循环语句 (117)4.3.1 while 和 until 语句 (117)4.3.2 for循环 (118)4.3.3 foreach 循环 (120)4.3.4 循环控制 (123)4.4 光块 (127)4.4.1 分支(case)结构 (129)4.5 goto (132)4.6 全局声明 (132)4.7 范围声明 (134)4.7.1 范围变量声明 (135)4.7.2 词法范围的变量:my (137)4.7.3 词法范围全局声明:our (138)4.7.4 动态范围变量:local (140)4.8 用法(pragmas) (142)4.8.1控制警告 (142)4.8.2 控制全局变量的使用 (143)第五章模式匹配 (144)5.1 正则表达式箴言 (145)5.2 模式匹配操作符 (148)5.2.1 模式修饰词 (152)5.2.2 m// 操作符(匹配) (155)5.2.3 s/// 操作符(替换) (158)5.2.3.1 顺便修改一下字串 (160)5.2.3.2 当全局替换不够“全局”地时候 (162)5.2.4 tr/// 操作符(转换) (162)5.3.1 元字符表 (166)5.3.2 特定的字符 (170)5.3.3 通配元符号 (171)5.4 字符表 (172)5.4.1 客户化字符表 (172)5.4.2 典型 Perl 字符表缩写 (173)5.4.3 Unicode 属性 (174)5.4.3.1 Perl 的 Unicode 属性 (175)5.4.3.2 标准的 Unicode 属性 (176)第六章子过程 (179)2.0 语意 (181)2.1 参数列表的技巧 (182)2.2 错误指示 (184)2.3 范围问题 (185)3.0 传入引用 (187)4.0 函数原型 (189)4.1 内联常量函数 (193)4.2 谨慎使用函数原型 (194)5.0 子过程属性 (196)5.1 Locked 和 method 属性 (196)5.3 左值属性 (197)第七章格式 (199)7.1格式变量 (203)7.2 页脚 (206)7.2.1 访问格式的内部 (206)第八章引用 (208)8.1 什么是引用? (208)8.2 创建引用 (210)8.2.1 反斜杠操作符 (210)8.2.2 匿名数据 (210)8.2.2.1 匿名数组组合器 (211)8.2.2.2 匿名散列组合器 (211)8.2.2.3 匿名子过程组合器 (213)8.2.3 对象构造器 (213)8.2.4 句柄引用 (214)8.2.5 符号表引用 (215)8.2.6 引用的隐含创建 (217)8.3 使用硬引用 (217)8.3.1 把一个变量当作变量名使用 (217)8.3.2 把一个 BLOCK 块当作变量名用 (219)8.3.3 使用箭头操作符 (219)8.3.4 使用对象方法 (222)8.3.5 伪散列 (222)8.3.6 硬引用可以用的其他技巧 (224)8.3.7 闭合(闭包) (226)8.3.7.1 用闭合做函数模板 (229)8.3.7.2 嵌套的子过程 (230)8.4 符号引用 (231)8.5 花括弧,方括弧和引号 (232)8.5.1 引用不能当作散列键字用 (234)8.5.2 垃圾收集,循环引用和弱引用 (235)第九章数据结构 (236)9.1 数组的数组 (237)9.1.1 创建和访问一个两维数组 (237)9.1.2 自行生长 (238)9.1.3 访问和打印 (240)9.1.4 片段 (241)9.1.5 常见错误 (242)9.2 数组的散列 (245)9.2.1 数组的散列的组成 (245)9.2.2 生成数组的散列 (246)9.2.3 访问和打印数组的散列 (247)9.3 散列的数组 (248)9.3.1 组成一个散列的数组 (248)9.3.2 生成散列的数组 (249)9.3.3 访问和打印散列的数组 (250)9.4 散列的散列 (251)9.4.1 构成一个散列的散列 (251)9.4.2 生成散列的散列 (252)9.4.3 访问和打印散列的散列 (255)9.5 函数的散列 (257)9.6 更灵活的记录 (258)9.6.1 更灵活的记录的组合,访问和打印 (258)9.6.2 甚至更灵活的记录的组合,访问和打印 (259)9.6.3 复杂记录散列的生成 (261)9.7 保存数据结构 (263)第十章包 (264)10.1 符号表 (268)10.2 自动装载 (273)第十一章模块 (276)11.1 使用模块 (276)11.2 创建模块 (278)11.2.1 模块私有和输出器 (279)11.2.1.1 不用 Exporter 的输入方法进行输出 (281)11.2.1.2 版本检查 (282)11.2.1.3 管理未知符号 (282)11.2.1.4 标签绑定工具函数 (283)11.3 覆盖内建的函数 (283)第十二章对象(上) (285)12.1 简单复习一下面向对象的语言 (285)12.2 Perl 的对象系统 (286)12.3 方法调用 (287)12.3.1 使用箭头操作符的方法调用 (288)12.3.2 使用间接对象的方法调用 (289)12.3.3 间接对象的句法障碍 (290)12.3.4 引用包的类 (292)12.4 构造对象 (293)12.4.1 可继承构造器 (294)12.4.2 初始器 (296)12.5 类继承 (298)第十二章对象(下) (300)12.5.1 通过 @ISA 继承 (300)12.5.2 访问被覆盖的方法 (301)12.5.3 UNIVERSAL:最终的祖先类 (303)12.5.4 方法自动装载 (306)12.5.5 私有方法 (308)12.6 实例析构器 (309)12.6.1 用 DESTROY 方法进行垃圾收集 (310)12.7 管理实例数据 (310)12.7.1 用 use fields 定义的域 (313)12.7.2 用 Class::Struct 生成类 (316)12.7.3使用 Autoloading(自动装载)生成指示器 (318)12.7.4 用闭合域生成指示器 (320)12.7.5 将闭合域用于私有对象 (321)12.7.6 新技巧 (324)12.8 管理类数据 (326)12.9 总结 (329)第十三章重载 (329)13.1 overload 用法 (330)13.3 可重载操作符 (333)13.4 拷贝构造器(=) (341)13.5 当缺失重载句柄的时候(nomethod 和 fallback) (342)13.6 重载常量 (343)13.7 公共重载函数 (345)13.8 继承和重载 (346)13.9 运行时重载 (346)13.10 重载诊断 (346)第十三章捆绑(tie)变量上 (347)14.1 捆绑标量 (349)14.1.1 标量捆绑方法 (350)14.1.2 魔术计数变量 (355)14.1.3 神奇地消除 $_ (356)14.2 捆绑数组 (358)14.2.1数组捆绑方法 (360)14.2.2 大家方便 (365)第十四章捆绑(tie)变量下 (367)14.3 捆绑散列 (367)14.3.1散列捆绑方法 (368)14.4捆绑文件句柄 (376)14.4.1 文件句柄捆绑方法 (378)14.4.2创建文件句柄 (388)14.5 一个精细的松绑陷阱 (395)14.6 CPAN 里的模块 (399)第十五章 UNICODE (400)15.1 制作字符 (401)15.2 字符语意的效果 (403)第十六章,进程间通讯 (409)16.1 信号 (409)16.1.1 给进程组发信号 (412)16.1.2 收割僵死进程 (413)16.1.3 给慢速操作调速 (415)16.1.4 阻塞信号 (416)16.2 文件 (416)16.2.1 文件锁定 (417)16.2.2 传递文件句柄 (421)16.3 管道 (425)16.3.1 匿名管道 (425)16.3.2 自言自语 (428)16.3.3 双向通讯 (431)16.3.4 命名管道 (434)16.4. System V IPC (436)16.5. 套接字 (442)16.5.1 网络客户端程序 (443)16.5.2 网络服务器 (446)16.5.3 消息传递 (450)第十七章线程 (453)17.1 进程模型 (453)17.2 线程模型 (454)17.2.1 线程模块 (456)17.2.1.1 创建线程 (456)17.2.1.2 线程删除 (457)17.2.1.3 捕获来自 join 的例外 (459)17.2.1.4 detach 方法 (459)17.2.1.5 标识线程 (460)17.2.1.6 列出当前线程 (460)17.2.1.7 交出处理器 (460)17.2.2 数据访问 (461)17.2.2.1 用 lock 进行访问同步 (461)17.2.2.2 死锁 (464)17.2.2.3 锁定子过程 (464)17.2.2.4 locked 属性 (466)17.2.2.5. 锁定方法 (467)17.2.2.6 条件变量 (467)17.2.3 其他线程模块 (469)17.2.3.1 队列(queue) (469)17.2.3.2. 信号灯 (471)17.2.3.3 其他标准线程模块 (471)第十八章编译 (472)18.1. Perl 程序的生命周期 (472)18.2 编译你的代码 (474)18.3 执行你的代码 (479)18.4编译器后端 (482)18.5 代码生成器 (483)18.5.1 字节码生成器 (483)18.5.2. C 代码生成器 (484)18.6提前编译,回头解释 (487)第十九章命令行接口 (491)19.1 命令行处理 (491)第一章 Perl概述1.1 从头开始我们认为 Perl 是一种容易学习和使用的语言,而且我们希望能证明我们是对的.Perl 比较简单的一个方面是你用不着在说想说的东西之前先说很多其他东西。
Perl学习笔记之CPAN使⽤介绍authors这个⽬录包含许多⼦⽬录,每个贡献者⼀个。
⽐如,如果你想找 Lincoln Stein 那些写得⾮常好的 CGI 模块(现在是标准 Perl 版本的⼀部分了),并且你碰巧知道是他写了这些模块,那么你就可以到authors/Lincoln_stein ⽬录⾥看看。
如果你不知道是他写了这些模块,那么你可以到下⾯描述的 modules ⽬录⾥找。
doc这个⽬录保存所有风格的Perl⽂档,包括Perl的官⽅⼿册页的好⼏种不同的排列和格式,⽐如⽂本,HTML,PostScript,和Perl⾃⾝的 pod 格式。
modules这个⽬录包含⽤Perl或者Perl和C混合写成的模块。
ports * 这个⽬录包含源代码,有时候还有⼀些预编译好的可执⾏的Perl移植,主要针对那些在标准版本⾥并不直接⽀持的操作系统,或者某些很难⽤的编译器。
scripts * 这个⽬录包含少量从全世界各地发来的各种各样的Perl程序。
它们可以⽤做独⽴的程序,或者也可以⽤做例⼦。
⽬前,这⾥⾯还没有很多程序列出,不过,随着时间的推移,这个区域会变得越来越丰富。
Perl Power Tools project (Perl 万能⼯具箱,PPT)也放在这⾥。
PPT的⽬标是⽤Perl重新制作所有Unix 、⼯具。
⼤多数标准的已经完成了,另外还有有些不那么标准的也做完了。
src在这个⽬录⾥,你可以找到标准Perl发布版本的源程序。
实际上,是两个标准 Perl版本的源程序,⼀个标记着 stable(稳定版),另外⼀个是 devel (开发版)。
(该⽬录的索引页有详细解释。
)它们都只是相应版本的链接。
早我们写这些的时候,stable.tar.gz 是到 perl-5.6.0.tar.gz(通常的⽅案是:如果版本号的第⼆个数字是偶数,那么它就是正式版本,如果是奇数,那么是开发版。
后⾯的.tar.gz 后缀有时候是 .tgz,表⽰它是⼀个标准的互联⽹格式:GNU 压缩的tar归档,常称做“tarball”)的符号链接。
ROI_PAC学习笔记(一)----总论ROI_PAC的全称是Repeat Orbit Interferometry Package. 由美国的JPL和Caltech开发. 软件运行于Linux平台, SGI或SUN平台. 是一个开源软件. 可以在openchannelfoundation 的网站上申请下载. 相对于动辄数万元的INSAR商业软件而言, 免费的ROI_PAC还是比较有吸引力的. 对于研究而言, 更重要的还在于它的开源. 软件的使用者可以根据自己的需要改编, 或是在其基础上添加新功能. 这就提高了我们在INSAR软件实验上的较率.虽然ROI_PAC的规模不是很大, 但要想使用它也非得先认真学习一番不可. 本人也是刚开始学习这个软件. 现在博客这样方便就不妨写上来, 如果有同人也有兴趣研究之, 那么一同学习讨论则是最好不过的了. 这个学习笔记的参考资料是由Buckley在2000年的博士论文改编的软件文档和ROI_PAC3.0.整个软件的总体流程是由Perl脚本控制的. 各专门的功能模块则是用Fortran或C编写的.处理步骤与模块的对应如下.处理步骤模块流程控制process.plSAR原始数据整理make_raw.plSAR成像roiSAR图像配准ampcor干涉图生成resamp_roi确定基线baseest干涉图去平cecpxcc, rilooks确定相关性Makecc; icu干涉图滤波icu相位解缠与绝对相位确定Icu; baseline确定形变diffnsim从解缠相位确定地形inverse3dprocess.pl是总的流程控制脚本. 它控制着从原始数据一直到生成形变图的全过程ROI_PAC学习笔记(二)----Perl基础ROI_PAC是用Perl脚本控制的。
笔者以为,了解一个软件应该从顶层入手,一开始先了解大体,然后再逐渐进入细部,而PERL恰恰就是ROI_PAC的最顶层的控制语言。
Perl学习笔记廖海仁2010年5月目录1.Perl简介 (4)2.数据类型 (5)2.1概览 (5)2.2命名空间(Namespaces) (5)2.3标量(Scalars) (6)2.4数组(Arrays) (9)2.5关联数组(Hashes) (12)2.6引用(References) (13)2.6.1 Perl引用简介 (13)2.6.2 创建引用 (13)2.6.3 使用引用 (14)2.6.4 符号引用 (15)2.6.5 垃圾回收与弱引用 (16)2.7数据结构 (16)2.7.1Arrays of Arrays (17)2.7.2Hash of Arrays (19)2.7.3Arrays of Hashes (21)2.7.4Hashes of Hashes (23)2.7.5Hashes of Functions (25)3操作符(Operators) (25)3.1 概述 (25)3.2 Perl操作符一览 (26)3.3 各种操作符使用说明 (27)3.3.1 项与左赋列表操作符 (27)3.3.2 箭头操作符 (28)3.3.3 自增自减 (28)3.3.4 乘方 (28)3.3.5 表意一元操作符 (28)3.3.6 捆绑操作符 (29)3.3.7 乘操作符 (29)3.3.8 加操作符 (29)3.3.9 移位操作符 (29)3.3.9 有名一元和文件测试操作符 (30)3.3.10 关系操作符 (31)3.3.11 位操作符 (32)3.3.12C风格逻辑操作符 (32)3.3.13 范围操作符 (32)3.3.14 条件操作符 (32)3.3.14 赋值操作符 (33)3.3.15 逗号操作符 (33)3.3.16 逻辑and, or, not和xor操作符 (33)3.4 与C操作符的比较 (34)3.4.1 Perl操作符的特别之处 (34)3.4.1 C有Perl没有的操作符 (34)4.语句 (34)4.1简单语句 (34)4.2复合语句 (35)4.2.1 条件语句(if/unless语句) (35)4.2.2循环语句(while/until/for/foreach语句) (36)4.2.3分支语句 (38)5.子程序(函数) (39)5.1子程序简介 (39)5.2 函数原型与属性 (41)5.3 Perl内部函数 (42)6. 文件、目录与I/O (43)6.1文件操作 (43)6.2 目录操作 (44)6.3 print/printf (45)6.4 注意事项 (45)7.模式匹配 (46)7.1模式匹配操作符简介 (46)7.2模式修饰符 (48)7.3模式匹配操作符详解 (49)7.3.1 m//操作符(匹配) (49)7.3.2 s///操作符(替换) (50)7.3.3 tr///操作符(字译) (52)7.4元字符 (52)7.5常见问题的正则解决方案 (56)8.面向对象编程 (56)8.1模块使用 (56)8.2对象使用 (57)9.Perl特殊变量 (58)10 Perl程序文档(POD) (60)11. Perl编程风格 (61)12. 参考文献 (63)1.Perl简介Perl一般被认为是Practical Extraction and Report Language(实用获取与报表语言)的缩写,是由C以及sed、awk、Unix shell及其它语言演化而来的一种语言。
它由语言学家Larry Wall 最初发明及实现。
Perl是一种为扫描任意的文本文件,从这些文本文件中获取信息,基于这些信息打印报表而优化的语言。
它也很适合于完成许多系统管理的任务。
Perl是一种粘合性语言,旨在实用(易用、高效、完整)而不是漂亮(优美、小巧)。
其吉祥物是骆驼,取其虽并不漂亮却任劳任怨、能干活之特点。
Perl不随意限制数据的大小,只要你有充足的内存。
递归的深度也不受限制。
关联数组使用可以根据需要扩展以避免性能衰退。
Perl能利用复杂的模式匹配技巧来快速扫描大量数据。
尽管善于处理文本,Perl也能处理二进制数据。
Perl 5增加了模块化处理、面向对象编程、引进引用以处理多维数组等复杂的数据结构、Unicode支持、多线程支持等功能,使得Perl成为一种更加完备强大的语言。
Perl语言的座右铭是:There’s More Than One Way To Do It (TMTOWTDI,有多种方法可以完成一件事,或者“条条道路通北京”)。
Perl是一种自然和智能语言,它能根据上下文环境解释执行,同时有大量省略写法。
如果你通常想使用sed、awk或sh来解决的问题,但是却发现它们的能力不够,或者想运行得更快一点,却不想傻傻地用C来写,Perl将是很好的选择。
Perl擅长于文本处理和系统管理,不适合于实时嵌入式系统编程、操作系统底层开发(比如驱动程序开发)、复杂的多线性共享内存应用以及极度大的应用。
Perl语言的长处:●强大的正则表达式和模式匹配功能(接近理想的正则表达式语言)●复杂灵活的数据结构(Array of Array, Array of Hash,Hash of Array, Hash of Hash等)●Unicode支持(相对AWK与C)其不足是:●动态类型语言,不是很可靠●自然语言,是优点也是缺陷,使得Perl语言代码可能晦涩难懂;●智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断;也因此产生种种编程陷阱。
●不是很优美。
多种方法做事,有时会让编程者无所适从。
●性能问题。
Perl灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要高性能的处理有时需要使用其它语言重写。
Perl语言的学习曲线浅而长。
只要看看《Learning Perl》,就可以编写简单的Perl程序了,然而要深入掌握Perl,要使用Perl的复杂数据结构,进行面向对象编程、多线程编程则不是那么容易的事,需要很长的时间学习和实践。
2.2.1概览Perl有以下几种数据类型:标量(Scalars)、数组(Arrays)、关联数组(Associative Arrays,或称Hash)、子程序(Subroutine)和Typeglob(*标识,指所有以上几种类型)。
这些类型都有不同的符号标识。
这些类型的说明如下:Type Character Example Is a Name forScalar$$cents An individual value(number or string)Array@@large A list of values, keyed by numberHash%%interest A group of values, keyed by stringSubroutine&&how A callable chunk of Perl codeTypeglob**struck Everything named stuck(以上引自《Programming Perl》)关于Perl的类型可以做如下说明:●不同的数据类型不同的命名空间,所以三种的标识符可以相同但互不干扰,即$array,@array,%array是完全不同的三个变量。
●Perl的数据类型是大小写敏感的;直接使用,不用声明(这一点可能成为缺陷,可以使用use strict语句强制必须声明)●引用(references)是Perl 5引进的一种特殊的标量。
●变量的命名以下划线或字母开头,可以是任意长度(1-251)。
●文件句柄(Filehandle)指给一个文件、设备、Socket或管道的名称。
●子程序相对其它类型是动词(其余为名词),较为特别,将用特别的一章详细说明2.2命名空间(Namespaces)Perl有两种命名空间,分别是符号表(symbol tables,也称为包(package))和词汇范围(lexical scopes,可以理解为局部空间)。
符号表是存储全局变量的全局关联数组(包括存储其它关联数组),词汇范围是无名的空间,不存在于任何符号表中,而是与你程序中的一段代码块相关联。
它们包含只对该代码块可见的变量。
以our定义的变量存在符号表中,又称为全局变量或包变量(它们对包来说名义上是私有的,但是由于包本身是全局的,所以又是全局的),以my定义的变量存储在词汇范围中,也称为局部变量。
在任一命名空间中,任一变量类型都有其子命名空间(由其前面的字符决定),用户可以给标量、数组、关联数组、文件句柄、子程序名、标号起相同的名字。
Perl的保留字也不会与变量名冲突。
Perl做名字查找的次序如下:●查找最小一级的包含的程序块,看变量是否在同一块中声明(my或者our)●查找更高一级的包含程序块进行查找●查找整个编译单元看是否有声明●如果没有找到,Perl将假定变量是包变量●如果没有包定义,Perl将在无名的最高层包(main)中查找,$::bert等同于$main::bert除了用my与our声明变量外,Perl中还有一种local的声明方式,注意local不是声明一个局部变量,而是使全局变量局部话,如果声明时未赋值,则所有的标量被初始化为undef, 所有的数组与关联数组被初始化为()。
其使用方式比如:if ($sw eq ‘-v’) {local @ARGV = @ARGV;unshift @ARGV, ‘echo’;system @ARGV;}又如当需要输出CSV格式的文件时可以使用local $, = “,”; local $/=”\n”; 免得每次print 都得写许多”,”和最后的”\n”;2.3标量(Scalars)标量是一个字符串、数值或者指向某类型的引用。
Perl的数值常量可以如下使用:$x = 12345; #整数$x = 12345.67; #浮点数$x = 6.02e23; #科学计数法$x = 4_294_967_296; #因为,是分隔符,所以4,294,967,296不能成立,Perl用_代替$x = 0377; #八进制$x = 0xffff; #十六进制$x = 0b1100_0000; #二进制Perl的字符串常量通常由单引号或双引号括起来。
双引号支持变量和转义字符序列替换;而单引号只支持两个转义字符\’和\”。
双引号支持的转义字符如下:Code Meaning\n Newline (usually LF)\r Carriage return (usually CR)\t Horizontal tab\f Form feed\b Backspace\a Alert(bell)\e ESC character\033ESC in octal\x7f DEL in hexadecimal\cC Control-C\x{263a}Unicode (smiley)\N{NAME}Named character (需要使用use charnames)\u Force next character to uppercase\l Force next character to lowercase\U Force all following characters to uppercase\L Force all following characters to lowercase\Q Backslash all following nonalphanumeric characters\E End \U, \L, or \QPerl除了使用单引号和双引号来引,还可以使用q//与qq//的更一般格式,Perl的引用结构如下:Customary Generic Meaning Interpolates‘’q//Literal String NO“”qq//Literal String YES``qx//Command execution YES()qw//Word list NO//m//Pattern Match YESs///s/abc/123/Pattern substitution YESy///tr/abc/123/Character translation NO“”qr//Regular expression YES(引自《Programming Perl》)Perl的标量相关函数有:函数用法作用chop chop VARIABLEchop(LIST)chop例子:@lines = `cat myfile`; chop @lines;chop($answer=<STDIN>);删除标量的最后一个字符,返回所删除的字符,不带参数相当于chop $_得到字符串的最后字符外的子字符串使用substr($string, 0, -1);chomp chomp VARIABLEchomp(LIST)chomp例子:while (<PASSWD>) {chomp;@array = split /:/;…}删除变量最后的换行符与chop不同的是如果字符串不含有换行符将不起作用它返回删除字符的个数如果是LIST,需要用(),比如使用chomp($a, $b)而不是chomp $a, $b;事实上,chomp删除$/定义的任意值,而不只是最后的字符。