Perl学习之正则表达式的应用(0 位领导批示)

一、使用m//匹配

我们曾经将模式放在一对正斜线(//)里面,如/fred/。这是m//(模式匹配)的一种简写。同qw//操作一样,可以使用任何成对的分隔符。
如果使用正斜线(/)作为分隔符,则可以省略掉前面的m。

二、可选的修饰符

有几个修饰符(modifier),通常叫做标记(flag),可以后缀在正则表达式后面来该变其默认的行为。

1.不区分大小写:/i

要创建一个大小写无关的模式,如匹配FRED时,也能匹配上fred, Fred,可以使用修饰符/i。

2.匹配任何字符:/s

默认情况下,点(.)不匹配换行符,这对于 单行中查找 的问题能很好解决。如果你的字符串中有换行符,并希望点(.)能匹配它们,那可以使用/s 这个修饰符。它将模式中点(.)的行为变成同字符类[\d\D]的行为类似:可以匹配任何字符,包括换行符。

3.添加空格:/x

/x 修饰符,允许你在模式中加入任何数量的空白,以方便阅读。

Perl中,注释可以被作为空白,因此使用/x,可以在模式中加上注释。
#号表示后面是注释,如果需要匹配井号,可以使用\#或[#]。注意不要在注释中使用闭分隔符,否则将结束此模式匹配。

4.将可选字符结合起来
如果在一个模式中需使用不止一个修饰符,可以一个接着一个。其顺序是不重要的。

全文阅读 »

Perl学习之正则表达式(0 位领导批示)

Perl有许多区别于其它语言的特性。在所有这些特性中,最重要的一条是对正则表达式的支持。它允许你方便,快捷的处理字符串相关的问题。
正则表达式(regular expressions)是一种特殊语言写成的程序,内嵌于Perl之中。

一、什么是正则表达式

正则表达式,在Perl中通常被称为模式(pattern):某个模板是否匹配某个字符串。由于存在无限的字符串,某个给定的模式将这些字符串分成两类:一类是能匹配的,一类是不能匹配的。这里没有或者,大概,几乎那样的匹配。要么匹配,要么不匹配。

一个模式可以匹配多个字符串:1个,多个,或者无限个。也可能匹配除了1个,多个,或者无限个字符串之外的所有字符串。我们将正则表达式看作一种由简单语言实现的程序,这种语言只有一个任务:查找某个字符串,返回匹配上(it matches)或者不匹配(it doesnot match)。

二、使用简单的模式

要匹配某个模式(正则表达式)和$_的关系,可以将模式放在正斜线(//)之间


$_ ="hollo world";
if(/o w/){
	print "it matches";
}

模式匹配通常返回true或false,因此经常用在if或while的条件表达式部分。

全文阅读 »

Perl学习之哈希 hash(0 位领导批示)

一、什么是哈希
哈希是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,其索引不是数字,而是名字。也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串。

key可以是任意的字符串,你可以使用任何的字符串作为key,但它们是唯一的。

另一种思考hash 的方法是,把它看作一堆数据(a barrel of data),每一个数据都有一个相应的标签。可以通过标签访问此标签对应的元素。但其中是没有“第一个”元素的概念的。在数组中,数组元素从0,1,2 开始编号。但在hash中,没有确定的顺序,因此也没有第一个元素。只是一些key/value 对的集合。

keys和values均为任意的标量,但keys通常转换为字符串。因此,如果将表达式50/20 作为keys,则其通常被转换为3字符的字符串“2.5”。

由于Perl的“没有不必要的限制”的设计哲学:hash可以是任意大小,从空hash(没有key/value对),到任何你内存允许的大小。

keys是唯一的,但values可以重复。hash的value可以是数字,字符串,undef,或者它们的混合,但key是唯一的。

为什么使用Hash
可以把hash看作一个简单的数据库,其中每一个key下面可以有一块数据。如果你的任务是关于:“查询重复的”,“唯一的”,“交叉引用的”,“查询表”,则hash很可能在这类应用中帮上你的忙。

二、哈希元素的存取
要访问hash 元素,可以使用下面的语法:$hash{$some_key}

这和访问数组元素的方法有些类似,这里下标(key)上使用的是花括号({}),而不是方括号([ ])。现在key 的表达式是字符串,而非数字。

hash的名字和Perl中其它的标识符的命名规则是一样的(字母,数字,下划线组成,但不能由数字开头)。

访问不存在的hash元素将得到undef。

全文阅读 »

Perl学习之列表和数组(0 位领导批示)

如果把标量认为是Perl中的单数的话,那列表(list)和数组则可认为是Perl中的复数。

列表是标量的有序集。数组是包含列表的变量。在Perl 中这个两个术语是可以互换的。但严格意义上讲,列表是指数据,而数组是其变量名。可以有一些值(列表)但不属于数组;但每一个数组标量都有一个列表,虽然其可以为空。

列表中每一个元素都是一个独立的标量值。这些值是有顺序的,也就是说,这些值从开头到最后一个元素有一个固定的序列。数组或者列表中的元素是编了号的,其索引从整数0开始,依次增一,因此数组或者列表第一个元素的索引为0。

由于每一个元素是一个独立的标量值,因此一个列表或者数组可以包含数字,字符串,undef 值,或者任意不同类型的标量值的组合。然而,这些元素的类型通常是一致的。

列表和数组可以包含任意数量的元素。最少含有0元素,最多可以填满你的可用内存。这里又体现了Perl 的设计哲学,“没有不必要的限制”。

1.访问数组元素
于Perl 可以通过索引值来访问元素,如:$array[0] = “test”;print $array[0];

数组名字和标量是属于完全不同的命名空间(namespace)。同一程序也可以同时包含叫做$array的标量变量。Perl将它们当作完全不同的事物来看待,不会混淆。(不建议这么做,容易弄混)

2.特殊的数组索引
如果将一个元素存储在数组最后元素的后面的位置,数组会自动增长的。Perl 没有长度的限制,只要你有足够的内存。如果Perl需要创建元素,则其值为undef。

有时需要知道数组最后一个元素的索引。如 array 数组,其最后一个元素的索引为$#array

一种简便方法:数组的负数索引值从最后一个元素开始。但不要认为这些索引是循环的。如果数组有3 元素,那有效的负数索引值是-1(最后一个元素),-2(中间的元素),-3(第一个元素)。实际上,几乎没有人使用除了-1之外的其它的负数索引值。

全文阅读 »

Perl学习之标量变量(0 位领导批示)

变量是保存一个或多个值的容器。变量的名字在整个程序中保持不变,但其包含的值可以变化。

Perl有三种变量:标量,数组,哈希(hash,又称关联数组)。

分别用不同的前缀表示:标量($),数组(@),哈希(%)。

标量变量可以存放一个标量值。标量变量的名字由一个美圆符号($)后接Perl标识符:由字母或下划线开头,后接字母,数字,或者下划线。或者说由字母,数字和下划线组成,但不能由数字开头。大小写是严格区分的:变量$Fred和变量$fred是不同的。任意字母,数字,下划线都有意义。

1.选择好的变量名。
大多数Perl程序中的变量都是小写的。在少数情况下,使用大写字母。所有字母均大写(如$ARGV)通常表明这个变量有特殊的地方。

2.标量赋值
Perl中的赋值符是等号,将等号右边的值赋给等号左边的变量。

3.二元赋值操作符
像$fred=$fred+3(同一个变量在赋值符两边出现)这样的表达式在Perl 中经常出现(同C 和Java 类似),因此Perl 提供了一种简便的替代方法:二元赋值操作符。
如:$fred=$fred+3 和 $fred+=3 是等价的
几乎每一个二元操作符都有一个等价的二元赋值形式:由这个符号后接等号组成。

Perl学习之标量数据(0 位领导批示)

标量是Perl 中最简单的数据类型。大多数的标量是数字或者字符串。你也许把数字和字符串看作不同的事物,但Perl 几乎以相同的观点来看待它们。

标量数据可有操作符(如相加和串联),通常会产生一个新的标量数据。标量数据的值可以存放在标量变量中。标量可以从文件或设备读取,也可以写进去。

一 数字

1.浮点数
数字符号(literal)是Perl程序源代码中代替某个值的方法。数字符号不是计算或I/O操作的结果,它是直接写进代码中的数据。你可能已经很熟悉Perl 的浮点数。有或没有小数点的数字都是允许的(包括+或-号),也可带一个十进制的指数(符号为E)

2.整数

3.非十进制整数
同许多其它语言一样,Perl 也允许使用非10为底的数字。八进制以0开头,十六进制以0x开头,二进制0b开头。在十六进制中A到F(或者a 到f)分别表示10到15。
当一个非十进制的数字超过4位时,读起来将很困难,Perl 允许你使用下划线来区分。

全文阅读 »

Perl学习之例程(子程序)(1 位领导批示)

例程 Subroutine 类似vbscript 中的子例程..在perl里也叫做函数(function),是结构化程序设计的基础。它接受多个输入参数,返回一个输出参数。

之所以说类似vbscript,就是定义时的语法几乎完全一样


sub subroutine_name(){...}

一个简单的例子:


use strict;#严格声明..加了这个之后使用变量之前必须声明.如:my $fs;
use warnings;
use Win32::OLE; #加载WIN32::OLE模块

sub getPath($)
{
my $wawa = shift;#shift是用来替换传递的例程参数
my $fs = Win32::OLE->new("Scripting.FileSystemObject");
my $folder = $fs->GetFolder(".");
my $ls_path = $folder->path;
return $wawa.$ls_path;
}

my $path = getPath('当前路径:');

print $path;

打印出当前文件所在的绝对路径..

Win32::OLE 是perl中实现对OLE对象的支持的模块.

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志