File I/O in Perl
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.
- read < (open an existing file for read) ex: open BOBSFILE, "<information.txt";
- write > (create a new file to write) ex: open NEWSTORY, ">story.txt";
- 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);