⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch07_02.htm

📁 By Tom Christiansen and Nathan Torkington ISBN 1-56592-243-3 First Edition, published August 1998
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD><TITLE>Recipe 7.1. Opening a File (Perl Cookbook)</TITLE><METANAME="DC.title"CONTENT="Perl Cookbook"><METANAME="DC.creator"CONTENT="Tom Christiansen &amp; Nathan Torkington"><METANAME="DC.publisher"CONTENT="O'Reilly &amp; Associates, Inc."><METANAME="DC.date"CONTENT="1999-07-02T01:35:42Z"><METANAME="DC.type"CONTENT="Text.Monograph"><METANAME="DC.format"CONTENT="text/html"SCHEME="MIME"><METANAME="DC.source"CONTENT="1-56592-243-3"SCHEME="ISBN"><METANAME="DC.language"CONTENT="en-US"><METANAME="generator"CONTENT="Jade 1.1/O'Reilly DocBook 3.0 to HTML 4.0"><LINKREV="made"HREF="mailto:online-books@oreilly.com"TITLE="Online Books Comments"><LINKREL="up"HREF="ch07_01.htm"TITLE="7. File Access"><LINKREL="prev"HREF="ch07_01.htm"TITLE="7.0. Introduction"><LINKREL="next"HREF="ch07_03.htm"TITLE="7.2. Opening Files with Unusual Filenames"></HEAD><BODYBGCOLOR="#FFFFFF"><img alt="Book Home" border="0" src="gifs/smbanner.gif" usemap="#banner-map" /><map name="banner-map"><area shape="rect" coords="1,-2,616,66" href="index.htm" alt="Perl Cookbook"><area shape="rect" coords="629,-11,726,25" href="jobjects/fsearch.htm" alt="Search this book" /></map><div class="navbar"><p><TABLEWIDTH="684"BORDER="0"CELLSPACING="0"CELLPADDING="0"><TR><TDALIGN="LEFT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch07_01.htm"TITLE="7.0. Introduction"><IMGSRC="../gifs/txtpreva.gif"ALT="Previous: 7.0. Introduction"BORDER="0"></A></TD><TDALIGN="CENTER"VALIGN="TOP"WIDTH="228"><B><FONTFACE="ARIEL,HELVETICA,HELV,SANSERIF"SIZE="-1"><ACLASS="chapter"REL="up"HREF="ch07_01.htm"TITLE="7. File Access"></A></FONT></B></TD><TDALIGN="RIGHT"VALIGN="TOP"WIDTH="228"><ACLASS="sect1"HREF="ch07_03.htm"TITLE="7.2. Opening Files with Unusual Filenames"><IMGSRC="../gifs/txtnexta.gif"ALT="Next: 7.2. Opening Files with Unusual Filenames"BORDER="0"></A></TD></TR></TABLE></DIV><DIVCLASS="sect1"><H2CLASS="sect1"><ACLASS="title"NAME="ch07-38018">7.1. Opening a File</A></H2><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch07-pgfId-206">Problem</A></H3><PCLASS="para"><ACLASS="indexterm"NAME="ch07-idx-1000009579-0"></A><ACLASS="indexterm"NAME="ch07-idx-1000009579-1"></A><ACLASS="indexterm"NAME="ch07-idx-1000009579-2"></A><ACLASS="indexterm"NAME="ch07-idx-1000009579-3"></A><ACLASS="indexterm"NAME="ch07-idx-1000009579-4"></A>You want to read or write to a filename from Perl.</P></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch07-pgfId-212">Solution</A></H3><PCLASS="para">Use <CODECLASS="literal">open</CODE> for convenience, <CODECLASS="literal">sysopen</CODE> for precision, or the IO::File module to get an anonymous filehandle.</P><PCLASS="para">The <CODECLASS="literal">open</CODE> function takes two arguments: the filehandle to open and one string containing the filename and special characters indicating how to open it (the mode):</P><PRECLASS="programlisting">open(SOURCE, &quot;&lt; $path&quot;)    or die &quot;Couldn't open $path for reading: $!\n&quot;;open(SINK, &quot;&gt; $path&quot;)    or die &quot;Couldn't open $path for writing: $!\n&quot;;</PRE><PCLASS="para">The <CODECLASS="literal">sysopen</CODE> function takes three or four arguments: filehandle, filename, mode, and an optional permissions value. The mode is a number constructed from constants provided by the Fcntl module:</P><PRECLASS="programlisting">use Fcntl;sysopen(SOURCE, $path, O_RDONLY)    or die &quot;Couldn't open $path for reading: $!\n&quot;;sysopen(SINK, $path, O_WRONLY)    or die &quot;Couldn't open $path for writing: $!\n&quot;;</PRE><PCLASS="para">The IO::File module's <CODECLASS="literal">new</CODE> method accepts both <CODECLASS="literal">open</CODE> and <CODECLASS="literal">sysopen</CODE> style arguments and returns an anonymous filehandle. The <CODECLASS="literal">new</CODE> method also accepts a mode in the style of <EMCLASS="emphasis">fopen </EM>(3):</P><PRECLASS="programlisting">use IO::File;# like Perl's open$fh = IO::File-&gt;new(&quot;&gt; $filename&quot;)    or die &quot;Couldn't open $filename for writing: $!\n&quot;;# like Perl's sysopen$fh = IO::File-&gt;new($filename, O_WRONLY|O_CREAT)    or die &quot;Couldn't open $filename for writing: $!\n&quot;;# like stdio's fopen(3)$fh = IO::File-&gt;new($filename, &quot;r+&quot;)    or die &quot;Couldn't open $filename for read and write: $!\n&quot;;</PRE></DIV><DIVCLASS="sect2"><H3CLASS="sect2"><ACLASS="title"NAME="ch07-pgfId-274">Discussion</A></H3><PCLASS="para">All input and output goes through filehandles, whether filehandles are mentioned or not. Filehandles aren't exclusively connected to files &nbsp;-  they're also used to communicate with other programs (see <ACLASS="xref"HREF="ch16_01.htm"TITLE="Process Management and Communication">Chapter 16, <CITECLASS="chapter">Process Management and Communication</CITE></A>) and for network communication (see <ACLASS="xref"HREF="ch17_01.htm"TITLE="Sockets">Chapter 17, <CITECLASS="chapter">Sockets</CITE></A>). The <CODECLASS="literal">open</CODE> function can also be used to manipulate file descriptors, discussed in <ACLASS="xref"HREF="ch07_20.htm"TITLE="Opening and Closing File Descriptors by Number">Recipe 7.19</A>.</P><PCLASS="para">The <CODECLASS="literal">open</CODE> function quickly and conveniently solves the problem of associating a filehandle with a file. It permits a shorthand for common modes (reading, writing, reading and writing, appending) passed in with the filename. It doesn't let you control the permission that files are created with or even whether files are created. For this level of control, you need <CODECLASS="literal">sysopen</CODE>, which uses constants provided by the Fcntl module to control individual settings like read, write, create, and truncate.</P><PCLASS="para">Most programmers meet <CODECLASS="literal">open</CODE> long before they meet <CODECLASS="literal">sysopen</CODE>. The following table shows how <CODECLASS="literal">open</CODE> modes (the <EMCLASS="emphasis">Filename</EM> column) correspond to <CODECLASS="literal">sysopen</CODE> constants (<EMCLASS="emphasis">O_  flags</EM>) and to the <EMCLASS="emphasis">fopen (3)</EM> strings that <CODECLASS="literal">IO::File-&gt;new</CODE> can take (<EMCLASS="emphasis">Char</EM>). <EMCLASS="emphasis">Read</EM> and <EMCLASS="emphasis">Write</EM> indicate that the filehandle may be read from or written to. <EMCLASS="emphasis">Append</EM> means no matter where you are in the file, output goes to the end of the file (on most systems). <EMCLASS="emphasis">Create</EM> indicates whether the <CODECLASS="literal">open</CODE> statement creates a file if one having the given name doesn't already exist. <EMCLASS="emphasis">Trunc</EM> indicates <CODECLASS="literal">open</CODE> will clobber any existing data if the file already exists.</P><TABLECLASS="informaltable"BORDER="1"CELLPADDING="3"><THEADCLASS="thead"><TRCLASS="row"VALIGN="TOP"><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Filename</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Read</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Write</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Append</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Create</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Trunc</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">O_flags</P></TH><THCLASS="entry"ALIGN="LEFT"ROWSPAN="1"COLSPAN="1"><PCLASS="para">Char</P></TH></TR></THEAD><TBODYCLASS="tbody"><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">&lt; <ICLASS="filename">file</I></P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">RDONLY</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para"><CODECLASS="literal">&quot;r&quot;</CODE></P></TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">&gt; <ICLASS="filename">file</I></P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">WRONLY TRUNC CREAT</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para"><CODECLASS="literal">&quot;w&quot;</CODE></P></TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">&gt;&gt; <ICLASS="filename">file</I></P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">WRONLY APPEND CREAT</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para"><CODECLASS="literal">&quot;a&quot;</CODE></P></TD></TR><TRCLASS="row"VALIGN="TOP"><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">+&lt; <ICLASS="filename">file</I></P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">yes</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">no</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para">RDWR</P></TD><TDCLASS="entry"ROWSPAN="1"COLSPAN="1"><PCLASS="para"><CODECLASS="literal">&quot;r+&quot;</CODE></P></TD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -