Chinaunix首页 | 论坛 | 博客
  • 博客访问: 966340
  • 博文数量: 184
  • 博客积分: 10030
  • 博客等级: 上将
  • 技术积分: 1532
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-27 18:32
文章分类

全部博文(184)

文章存档

2009年(1)

2008年(63)

2007年(39)

2006年(79)

2005年(2)

我的朋友

分类:

2007-01-04 15:52:41

到目前为止,我们讨论了读取文件的三种方式:行读取方式,字符读取,每次读取定量字符。
如果一次要读入整个文件,怎么办呢? Perl把这种任务称“吞吃文件”。 在“列表使用场合”下,试用菱形运算符是“吞吃文件”的一种方式。 比如给菱形运算符表达式一个数组,导致菱形运算符读取整个文件,并将其中的每行放入数组中的一个单元。 “吞吃文件”的另一种方式是更改特殊变量$/中的值。
$/ 中保存这输入行记录分隔符(它的默认分隔符是\n)。因此,每当菱形运算符用于读取数据时,它将一直读取数据,直到它发现与$/一致的字符。所以,如果我们将$/设为 undef ,菱形运算符将读取整个文件并将它们存储在标量中。
 
提示:
为了完成某个任务而将特殊变量(比如$/)的默认值更改为特殊值,将在后面的程序中导致错误。 请记住,任务完成时,一定要恢复它们的默认值。
 
无论何时更改$/或其他特殊变量的值,都应该在那个代码块中使用local指令,以便“特殊动作”完成后即可恢复为更改前的值。 这有助于避免难以察觉的错误。
 
使用更改$/的方法“吞吃文件”:
-------------------------------
#!/usr/bin/perl
use strict;
use warnings;
print "***","$/","---\n";
open(FILE,"$/ = undef;  # 此行注掉后,$arr 仅读入a
my $arr = ;
print $arr;
close(FILE);
--------------------------------
程序输出及file.txt的文件内容
 
[root@dev perl]# ./t
***
---
a
b
c
d
[root@dev perl]# cat file.txt
a
b
c
d
[root@dev perl]#
-------------------------------
*******************************
 
使用<>“吞吃文件”:
#!/usr/bin/perl
use strict;
use warnings;
print "***","$/","---\n";
open(FILE,"my @arr = ;
print @arr;
close(FILE);
-------------------------------
输出同上。
 
 
使用local更改变量"$/":
-------------------------------
#!/usr/bin/perl
use strict;
use warnings;
print "***","$/","---\n";
printfile();
sub printfile {
open(FILE,"local $/ = undef;
my $arr = ;
print $arr;
close(FILE);
print "***","$/","---\n";
}
print "***","$/","---\n";
------------------------------
阅读(1658) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~