Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345535
  • 博文数量: 26
  • 博客积分: 3726
  • 博客等级: 中校
  • 技术积分: 621
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-29 08:59
文章分类

全部博文(26)

文章存档

2008年(26)

分类:

2008-04-01 12:58:02

程序就不多废话了,作用就是文件,关键部分在“$line = ”,尖括号操作符(即,<>)作用是取一行文件内容(相信大多数教程或是上都是这么写的),但是,里所的一行,实际上是有一个准的,那就是当perl在遇到了行符后,边认为是一行,而行符默情况下是由于$/个特殊量定的,是缺省

也就是perl 次使用<>操作符文件的候,会先从$/得一个叫做“分隔符”的西,并以分隔符为标记取文件,如果按默$/个分割符就是一个行符,所以,默认时<>操作符才会取一行文本。

出的例子中,有这样一句 undef $/ ,也就是将$/未定这样一来呢,$/就不再起作用了,因此,大家可以看到,第二次行同的操作的候, <>操作符就不再是只一行而是将文件内容全部出来了。

 

接下来看一个会受到$/影响的内置量,是先说实例:

$text = "C:\test.txt";

open FH,$text or die "can't open:$!";

while () {

print "line $. is:$_";

}

close FH;

先来看循中的:print "line $. is:$_"

程序的作用是文件,并且,将文件逐行赋值给$_(因只用了<>操作符而没有指定内赋值变量,因此,默就是赋值给$_);

但是里除了$_有一个量“$.”

来看一下果:

line 1 is:111111111111111111111111111

line 2 is:222222222222222222222222222

line 3 is:333333333333333333333333333

$.的作用是一个数器的西,但是,么刚开始我$.会受到$/量的影响呢

将上面的例子稍做修改,再看一下:

$text = "C:\test.txt";

undef $/; # 注意,多加了一行

open FH,$text or die "can't open:$!";

while () {

print "line $. is:$_";

}

close FH;

 

第二行多加了一句undef $/; ,上面已经说过它的作用了,来看一下段程序运行的果:

line 1 is:111111111111111111111111111

222222222222222222222222222

333333333333333333333333333

本来应该是三行的文本,不但被一次性打印出来,而且指明了“line 1”(看来程序认为这个文本只有一行),

是因$.量并不是一个单纯的行数器,确切地,可以$.是一个$/数器,我再来看一段程序大概就会明白了:

$text = "C:\a.txt";

$/ = ";"; # 注意里,里我并将$/未定,而是赋值为分号

open FH,$text or die "can't open:$!";

while () {

print "line $. is:$_\n";

}

close FH;

 

再看一下C下的a.txt的内容:

ddd;bbb;ccc;fff;eee;

这么简单了。

看一下运行果:

line 1 is:ddd;

line 2 is:bbb;

line 3 is:ccc;

line 4 is:fff;

line 5 is:eee;

过这段程序应该就明白了吧。

好,$.经讲得差不多了,接下来再一个它的特性,仍然是看程序说话

$text = "C:\test.txt";

open FH,$text or die "can't open:$!";

while () {

print "line $. is:$_\n";

}

print "\n",$.;

close FH;

print "\n",$.;

个程序要注意的是最后三行中的两个print "\n",$.;(一个是在关闭文件前,另外一个是在关闭文件后)。

看一下果:

line 1 is:111111111111111111111111111

line 2 is:222222222222222222222222222

line 3 is:333333333333333333333333333

3

0

果的前三行才就已知道了,不是我们关心的,我们应该关心的是最后两行果(即两个print "\n",$.;果);

$.量是具有记忆性的(从原理上来将,它是一个包量),因此,在关闭文件前打印会发现,它的没有化的(这时和最后一次完文件的3);

而在关闭文件后,该变量又被重新初始化0了。

个特性大家注意一下就可以了,因其中的原理及到了perl的作用域和包的一些知,不是很容易清楚,所以就不了,如果包和作用域有了解的对这部分即使我不应该能理解的。

 

最后一个吧

一个用来简单判断操作系统类型的,看个例子:

C:\>perl -e "print $^O;";

MSWin32

注意,个特殊$^O 最后一个字符是字母O,且大写。

如果是在linux下的果就不是MSWin32了,而是Linux

是一个判断境的量,简单实用。

perl的内置特殊有很多的,例如常用的@_@ARGV$ARGV%INC%ENV等等,有很多,不可能一一列了,出一个比总结性的列表,是chinaunixperl社区的一个网友总结的,算比全:

$- 当前可打印的行数,属于Perl格式系的一部分

$! 根据上下文内容返回错误号或者错误

$ 列表分隔符

$# 打印数字的数字出格式

$$ Perl器的ID

$% 当前出通道的当前

$& 与上个格式匹配的字符串

$( 当前程的ID

$) 当前程的有效ID

$* 1表示理多行格式.在多以/s/m符取代之.

$, 当前出字段分隔符

$. 上次阅读的文件的当前入行号

$/ 当前记录分隔符,情况是新行

$: 字符,此后的字符串将被分,以填充连续的字段.

$; 在仿真多组时使用的分隔符.

$? 返回上一个外部命令的状

$@ Perl器从eval句返回的错误消息

$[ 中第一个元素的索引号

$\ 当前记录的分隔符

$] Perl器的子版本号

$^ 当前通道最上面的出格式名字

$^A 打印前用于保存格式化数据的

$^D 调试标志的

$^E 在非UNIX境中的操作系统扩错误信息

$^F 最大的文件捆述符数

$^H 编译器激活的检查

$^I 内置控制编辑器的

$^L 送到出通道的走纸换页

$^M 用内存池的大小

$^O 操作系

$^P 指定当前调试值的内部

$^R 表达式的上次求值结

$^S 当前解器状

$^T 从新世纪开始算起,本以秒算的始运行的时间

$^W 警告开关的当前

$^X Perl制可行代的名字

$_ /出和格式匹配空

$| 控制当前选择出文件句柄的

$~ 当前告格式的名字

$` 在上个格式匹配信息前的字符串

$ 在上个格式匹配信息后的字符串

$+ 与上个正表达式搜索格式匹配的最后一个括号

$< 当前行解器的用的真ID

$ 含有与上个匹配正表达式对应括号

$= 当前面可打印行的数目

$> 当前程的有效用ID

包含正在行的脚本的文件名

$ARGV 从默的文件句柄中的当前文件名

%ENV 量列表

%INC dorequire包含的文件列表

%SIG 信号列表及其理方式

@_ 传给子程序的参数列表

@ARGV 传给脚本的命令行参数列表

@INC 入模块时需要搜索的目列表

$-[0]$+[0] 代表当前匹配的正表达式在被匹配的字符串中的起始和止的位置

阅读(1593) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~