File I/O in Perl

From Free Knowledge Base- The DUCK Project: information for everyone
Revision as of 09:52, 12 April 2008 by Admin (Talk | contribs)

Jump to: navigation, search

Use a filehandle to open a file in Perl. The filehandle identifier doesn't have a prefix like other Perl identifiers.

To open a file use a FILEHANDLE (a name you decide, all caps isn't a requirement but suggested for clarity) and a FILENAME

open(BOBSFILE, "information.txt");

The above file will be opened for "read" since no i/o type was specified. There are three ways to open a file. This is specified with a symbol before the filename. If no symbol is specified, "read" is assumed.

  1. read <            (open an existing file for read)   ex: open BOBSFILE, "<information.txt";
  2. write >            (create a new file to write)   ex: open NEWSTORY, ">story.txt";
  3. append >>            (add more to an existing file)   ex: open(LOG, ">>activity.log");
open BOBSFILE, "<information.txt";
open NEWSTORY, ">story.txt";
open(LOG, ">>activity.log");

If you open another file using the same FILEHANDLE, Perl will automatically close the previous file and let you use the FILEHANDLE for the new file.

To manually close a FILEHANDLE:

close FILEHANDLE;

Be prepared to deal with uncooperative files.

open(FILEHANDLE, ">bobsinfo.dat") or die("Error");

Web development example.

open (FILE,"$guestbk") || die "Can't Open $guestbk: $!\n";

 

Open a file to READ

To open a file and read only the first line:

$strVariable = <BOBSFILE>;
# remove CR LF
$strVariable = chomp($strVariable = );  

Read and print all lines as well as number them.

open (FILE,"$guestbk") || die "Can't Open $guestbk: $!\n";
$lnum = 1;
while( $line = <FILE> ){
  chomp($line);
  print "$lnum: $line\n";
  $lnum++;
}
close FILE;

Read all lines into an array.

@eachline = <FILE>;
chomp(@eachline);
print "@eachline";

 

Open a file to WRITE

open (GUEST,">$guestbk") || die "Can't Open $guestbookreal: $!\n";
print GUEST "

New Guestbook Entry

\n";
print GUEST "$FORM{'realname'}</a></b>";
print GUEST "Time: $date
\n"; print GUEST "Comments: $txtComments
\n"; close (GUEST);