`

Perl模块之Tie::File

    博客分类:
  • perl
阅读更多

原文:http://hi.baidu.com/mylongwalk/blog/item/004df0220cc2cc4dad34dea0.html

perl的Tie::File模块真是与乎寻常的强大

Tie::File:  
             Tie::File - Access the lines of a disk file via a Perl array: 将一个file和array tie起来,对array所做的任何操作都会同步反映到file上,等同于对文件进行了操作。

注意:Tie::File模块不适用于处理存放大量短小记录的文件!!

    这里所说的记录型文件,是指文件读写时的最小单位是记录而不是通常的字节。数据记录之间以记录分隔符隔开,故要求文件有效数据的内容不会与记录分隔符相混淆。通常我们使用的文本文件就属于记录型文件,它的记录分隔符在win32下是\r\n序列,在unix下则是\n。对于记录型文件,Perl提供了一个模块Tie::File将文件同一个数组关联起来,对数组进行操作就等价于对文件本身进行操作,数组内容所有的改变都会立即反映在文件中。更令人兴奋的是同文件相关的这个数组是一个“虚拟”数组,本身并不会占用多少空间,因此即使操作数以GB计的文件也十分轻松。其用法如下:

use strict;                                                                      
use warnings;                                                                    
use Tie::File;                                                                   

my @lines; # 文件关联数组                                                        
my $filename='./test.dat'; # 记录文件名                                          

tie(@lines,'Tie::File',$filename) or die; # 将记录文件同数组关联,默认为文本型文件
                                          # 记录分隔符使用"\r\n"或"\n"           

$lines[0]="Hello"; # 这里对数组内容的操作就直接反映到文件中去了                  
$lines[1]="world!"; # 增加一条新记录                                             
splice(@lines,1,0,"insert another line"); # 在老记录之间插入记录                                                     
delete $lines[0]; # 删除记录                                                     

untie(@lines); # 解除文件同数组的关联                                            

这就是对文本文件的一系列操作,可以看出该模块使用起来十分灵活简便。除此之外模块还有几个选项可以调整细节行为,常用选项如下:

    1. recsep
    类似于$/, 用来指定记录分隔符,分隔符可以是任意字符串。每条记录都不包含分隔符,但写入文件时都会自动附加上一个记录分隔符,如果记录内容本身已经附加有分隔符则会忽略。读出记录内容时会自动去除分隔符(由autochomp选项控制)。默认的记录分隔符是"\r\n"或"\n",我们可以任意改变它以适应自己的需求。唯一需要注意的地方就是记录分隔符不可与有效数据内容混淆,也不能为空(没有记录分隔符就谈不上记录型文件了)。            
         tie (@array, 'Tie::File', $file, recsep => 'es');
This says that records are delimited by the string es . If the file contained the following data:
         Curse these pesky flies!\n
then the @array would appear to have four elements:
1."Curse th"
2 ."e p"
3."ky fli"
4."!\n"

            

    2. autochomp
    指定读出记录时是否去除记录分隔符,(默认)为真值时会自动去除分隔符。如:
     Normally, array elements have the record separator removed, so that if the file contains the text

  1. Gold
  2. Frankincense
  3. Myrrh

    the tied array will appear to contain ("Gold", "Frankincense", "Myrrh")(不包括换行)If you set   autochomp to a false value, the record separator will not be removed. If the file above was tied with

  1. tie (@gifts, "Tie::File", $gifts, autochomp => 0);

   then the array @gifts would appear to contain ("Gold\n", "Frankincense\n", "Myrrh\n") , or (on Win32 systems) ("Gold\r\n", "Frankincense\r\n", "Myrrh\r\n") .      

   3. splice
     spice是perl命令,不是此模块所独有,用法如下:
    splice ARRAY,OFFSET,LENGTH,LIST
    splice ARRAY,OFFSET,LENGTH
    splice ARRAY,OFFSET
    splice ARRAY    
    从第offset个元素开始,删除长度为length个元素,若list存在,则 用list代替删除掉的数据(若lenght=0,则变成了添加)。若省略length,则删除从offset开始的所有数据。offset和 length都省略则删除所有元素。

除此之外还有mode、memory、dw_size等选项。另外在指定选项时可以在选项前加一个“-”号,即tie(...,-recsep=& gt;...)和tie(...,recsep=>...)这两种形式是等价的。对该模块的进一步说明请参考perldoc Tie::File
http://perldoc.perl.org/Tie/File.html

分享到:
评论

相关推荐

    [Perl文]IO::Socket简介

    [Perl文]IO::Socket简介 ''''''''''''''''''' new()方法: SOCKET对象变量=IO::Socket::INET->new(SOCKET变量值); 实例: $sock=IO::Socket::INET->new('192.168.1.2:23'); 讲解: 所有的PERL对象编程都把对象...

    perl模块安装工具:cpanm

    cpanm是一种比cpan更简洁的perl模块安装工具。 cpanm本身其实只是一个可执行文件而已。将它下载到 bin 目录,然后添加执行权限就可以用了。 使用时,参数名直接为模块名称即可。如: $ sudo cpanm CGI::Session 可以...

    perl的xml::simple解析文件

    Perl中的XML::Simple模块是Perl社区广泛使用的XML解析器,尤其适合处理小型或结构简单的XML文档。这个模块的名称虽然包含“Simple”,但它实际上提供了一种简洁的接口,用于将XML数据转换为Perl数据结构,反之亦然。...

    windows下perl模块编译文件:dmake

    如果在windows下用perl编译模块时,需要使用dmake。 perl MakeFile.pl dmake dmake test dmake install 如果使用MinGw,需要把dmake放到MinGw的bin目录下。

    Log-Log4perl-1.36.tar.gz

    log4perl.appender.FileAppender = Log::Log4perl::Appender::File log4perl.appender.FileAppender.filename = app.log log4perl.appender.FileAppender.layout = Log::Log4perl::Layout::PatternLayout log4perl....

    删除卸载单个perl模块脚本

    在Perl编程环境中,模块是可重复使用代码的封装单元,它们提供特定的功能,方便开发者进行程序构建。然而,随着时间的推移,某些模块可能不再需要或者需要更新版本,这时就需要进行卸载。本文将深入探讨如何干净地...

    perl-Class-MethodMaker

    CentOS解决错误:Requires: perl(Class::MethodMaker)。CnetOS中MySQL集群问题。

    Linux上安装Perl模块方法介绍

    ### Linux上安装Perl模块方法详解 #### 一、引言 在Linux环境下处理大量数据时,Perl语言因其强大的文本处理能力和脚本编写能力而被广泛采用。然而,要充分利用Perl的强大功能,安装必要的Perl模块至关重要。本文...

    Perl语言程序设计:第1章 Perl语言简介.ppt

    Perl 语言的主要内容包括变量类型、控制结构、子程序、文件的操作、正则表达式、智能匹配、字符串的操作、输入与输出、进程的管理、第三方模块的使用等。 第一个 Perl 程序 用户可以使用 Perl 语言编写第一个程序...

    perl SVG module

    Perl SVG模块是一个强大的Perl编程库,它允许开发者使用Perl语言创建和操纵Scalable Vector Graphics (SVG)格式的图形。SVG是一种基于XML的矢量图像标准,广泛应用于网页设计、数据可视化、科学图表以及生物信息学等...

    perl-devel-module-trace:打印使用的所需 perl 模块的 ascii 表

    Perl 模块 - Devel::Module::Trace Devel::Module::Trace 是一个 perl 模块,它打印所有使用和需要的模块及其来源和经过时间的表格。 这有助于拆除缓慢的模块并有助于优化模块的总体使用。 该模块使用 Time::Hires...

    windous下perl-gui编程模块 Win32-GUI-1.06-PPM-5.8

    `Win32-GUI`模块是Perl社区为Windows平台开发的一个开源库,它使得Perl程序员能够轻松地创建各种窗口、控件和事件处理程序,而无需深入学习底层的Windows编程技术。`Win32-GUI`提供了包括按钮、文本框、列表视图、...

    perl 模块(spreadsheet、XML::Simple、DBB::mysql等模块)

    在实际应用中,Perl模块通常通过CPAN(Comprehensive Perl Archive Network)获取,这是一个庞大的Perl模块仓库,包含了数千个不同功能的模块,覆盖了各种各样的编程需求。 使用这些模块,Perl程序员可以构建功能...

    perl常用模块例子

    以上仅是Perl众多模块中的冰山一角,但通过这些例子我们可以看到,Perl的强大之处在于它丰富的第三方模块生态系统,几乎涵盖了所有的开发需求。希望本文能够帮助读者更好地理解和使用这些模块,提高开发效率。

    perl-File-BaseDir-0.08-1.el8.noarch(2).rpm

    官方离线安装包,亲测可用

    mod_perl Perl模块

    它支持各种模块以增加功能或改变其行为,mod_perl就是其中之一。 3. **mod_perl模块**:mod_perl是Apache的一个模块,它将Perl代码编译成共享内存的一部分,使得Apache可以直接执行Perl代码,而非通过CGI接口。这样...

    Tie::Persistent.pm-开源

    Tie::Persistent.pm模块就是为了解决这个问题而诞生的,它提供了一种简单、直观的方式来实现Perl变量的数据持久化。作为开源软件,Tie::Persistent.pm允许开发者自由地使用、修改和分发,大大推动了Perl社区的创新和...

    file-next:File :: Next,是Perl 5的文件查找模块

    File :: Next是用于查找文件的基于迭代器的模块。 它是轻量级的,没有依赖项,可以在污点模式下运行,并且可以使您的程序更直接地控制文件选择。 它主要取自Mark Jason Dominus的出色著作 。 安装 要安装此模块,...

    bugzilla的perl模块

    在Bugzilla 3.2.2版本中,为了正常运行,它依赖于一系列Perl模块。Perl是一种广泛用于系统管理和网络编程的脚本语言,它的模块生态丰富,为Bugzilla提供了强大的功能支持。 首先,我们需要了解Perl模块的概念。Perl...

Global site tag (gtag.js) - Google Analytics