📄 ch08_216.htm
字号:
<html><head><title>Tie::File (Perl in a Nutshell, 2nd Edition)</title><link rel="stylesheet" type="text/css" href="../style/style1.css" /><meta name="DC.Creator" content="Stephen Spainhour" /><meta name="DC.Format" content="text/xml" scheme="MIME" /><meta name="DC.Language" content="en-US" /><meta name="DC.Publisher" content="O'Reilly & Associates, Inc." /><meta name="DC.Source" scheme="ISBN" content="0596002416L" /><meta name="DC.Subject.Keyword" content="stuff" /><meta name="DC.Title" content="Perl in a Nutshell, 2nd Edition" /><meta name="DC.Type" content="Text.Monograph" /></head><body bgcolor="#ffffff"><img src="gifs/smbanner.gif" usemap="#banner-map" border="0" alt="Book Home" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Java and XSLT" /><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch08_215.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228" /><td align="right" valign="top" width="228"><a href="ch08_217.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr></table></div><h2 class="sect1">8.216. Tie::File</h2><p>Represents a regular text file as a Perl array, such that eachelement in the array corresponds to a record in the file. The firstline of the file is element <tt class="literal">0</tt> of the array, thesecond line is element <tt class="literal">1</tt>, and so on. When you adda new item to the array, this change will be noted in the fileimmediately. Note that the file isn't loaded intomemory, so the files can be very large if needed. Tie::File isshipped with the Perl 5.8 source kit.</p><p>Let's say that we have a file that contains:</p><blockquote><pre class="code">OneTwoThreeFourFiveSix</pre></blockquote><p>You can use Tie::File to report about the contents of the file asfollows:</p><blockquote><pre class="code">#!/usr/local/bin/perl -wuse Tile::File;my $infile = 'mynotes.db.txt';my @lines; tie(@lines, 'Tie::File', $infile)die("can't open $infile: $!");my $n_recs = @lines;print "$infile has [$n_recs]\n";</pre></blockquote><p>Now, set the second line of the file to <tt class="literal">3</tt>:</p><blockquote><pre class="code">$lines[2] = 3;</pre></blockquote><p>and lowercase everything that's in the file:</p><blockquote><pre class="code">foreach my $line (@lines) { lc($line);}</pre></blockquote><p>Add one line to the file:</p><blockquote><pre class="code">push(@lines, "Here's one more for you");</pre></blockquote><p>Now we're done:</p><blockquote><pre class="code">untie @lines;</pre></blockquote><p>Tie::File supports the following options:</p><dl><dt><b><tt class="literal">recsep</tt></b></dt><dd>Changes <tt class="literal">$/</tt> to what you'll use toseparate the records (or lines) in your file.<tt class="literal">recsep</tt> may not be undefined.</p><blockquote><pre class="code">my $file = 'datafile';my $recsep = "\cA"; # Break records on ^Atie @lines, 'Tie::File', $file, recsep => $recsep;</pre></blockquote><p>Given the line:</p><blockquote><pre class="code">this^Athat^Athe^Aother^Athing\n</pre></blockquote><p>Tie::File would see the records like so:</p><blockquote><pre class="code">0: this1: that2: the3: other4: thing</pre></blockquote><p>If you do not specify a <tt class="literal">recsep</tt>, Tie::File willdefault to <tt class="literal">\n</tt>. Thus, the following are equivalent:</p><blockquote><pre class="code">$lines[5] = "Sixty6";$lines[5] = "Sixty6\n";</pre></blockquote></dd><dt><b><tt class="literal">autochomp</tt></b></dt><dd>If specified, and if <tt class="literal">\n</tt> is your default<tt class="literal">recsep</tt>, <tt class="literal">\n</tt> will be removed asthe record separator. Default is <tt class="literal">0</tt>.</p></dd><dt><b><tt class="literal">mode</tt></b></dt><dd>Sets if the file will be set for read, write, or read/write access.Options include <tt class="literal">O_RDWR</tt> and<tt class="literal">O_CREAT</tt>:</p><blockquote><pre class="code">use Fcntl 'O_RDWR', 'O_CREAT'; # Open file RDWR, or CREAT if $file doesn't existtie @lines, 'Tie::File', $file, mode => O_RDWR | O_CREAT;</pre></blockquote></dd><dt><b><tt class="literal">memory</tt></b></dt><dd>Sets the upper limit on the amount of memory that Tie::File willconsume.</p></dd><dt><b><tt class="literal">dw_size</tt></b></dt><dd>Specifies that data should be written into a deferred write buffer ofa given size instead of in the file itself.</p></dd></dl><p>See the documentation for Tie for a description of the additional<tt class="literal">tie()</tt> methods.</p><hr width="684" align="left" /><div class="navbar"><table width="684" border="0"><tr><td align="left" valign="top" width="228"><a href="ch08_215.htm"><img src="../gifs/txtpreva.gif" alt="Previous" border="0" /></a></td><td align="center" valign="top" width="228"><a href="index.htm"><img src="../gifs/txthome.gif" alt="Home" border="0" /></a></td><td align="right" valign="top" width="228"><a href="ch08_217.htm"><img src="../gifs/txtnexta.gif" alt="Next" border="0" /></a></td></tr><tr><td align="left" valign="top" width="228">8.215. Tie::Array, Tie::StdArray</td><td align="center" valign="top" width="228"><a href="index/index.htm"><img src="../gifs/index.gif" alt="Book Index" border="0" /></a></td><td align="right" valign="top" width="228">8.217. Tie::Handle</td></tr></table></div><hr width="684" align="left" /><img src="../gifs/navbar.gif" usemap="#library-map" border="0" alt="Library Navigation Links" /><p><p><font size="-1"><a href="copyrght.htm">Copyright © 2002</a> O'Reilly & Associates. All rights reserved.</font></p><map name="library-map"><area shape="rect" coords="1,0,85,94" href="../index.htm"><area shape="rect" coords="86,1,178,103" href="../lwp/index.htm"><area shape="rect" coords="180,0,265,103" href="../lperl/index.htm"><area shape="rect" coords="267,0,353,105" href="../perlnut/index.htm"><area shape="rect" coords="354,1,446,115" href="../prog/index.htm"><area shape="rect" coords="448,0,526,132" href="../tk/index.htm"><area shape="rect" coords="528,1,615,119" href="../cookbook/index.htm"><area shape="rect" coords="617,0,690,135" href="../pxml/index.htm"></map></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -