Some updates on file opening and reading in Perl ...
1. The original
open function was good, but technically questionable in that the second parameter includes (as a single string) both the name of the file and an indicator as to whether it's being opened for read or write. The newer (three parameter form) of
open, in which the read / write indicator has been separated out and the file name moved to a third parameter has been around a while now - and is recommended unless you're required to support very old Perl versions.
2. The <> operator - surrounding a file handle - has always been an interesting one to explain during courses, as it's so different to a more traditional function call. The
readline function is a more conventional alternative these days - although you are required to pass in the file handle as a "typeglob" to it. Me thinks that's one difficult explanation removed, but perhaps another added in!
So
open (FH,$filename) or die ("$! - $filename\n");
or
open (FH,"<$filename") or die ("$! - $filename\n");
is replacable / improved by
open (FH,"<",$filename) or die ("$! - $filename\n");
And
while ($line = <FH>) {
may be replaced by
while ($line = readline(*FH)) {
(but I am not claiming that as a universal improvement)
See full source
[here]. And see
[here] for a discussion of how / when you should move forward to using some of these newer features of Perl.
(written 2010-06-19)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
P207 - Perl - File Handling [12] How many people in a room? - (2004-08-12)
[114] Relative or absolute milkman - (2004-11-10)
[255] STDIN, STDOUT, STDERR and DATA - Perl file handles - (2005-03-23)
[616] printf - a flawed but useful function - (2006-02-22)
[618] Perl - its up to YOU to check your file opened - (2006-02-23)
[702] Iterators - expressions tha change each time you call them - (2006-04-27)
[867] Being sure to be positive in Perl - (2006-09-15)
[1312] Some one line Perl tips and techniques - (2007-08-21)
[1416] Good, steady, simple example - Perl file handling - (2007-10-30)
[1442] Reading a file multiple times - file pointers - (2007-11-23)
[1467] stdout v stderr (Tcl, Perl, Shell) - (2007-12-10)
[1709] There is more that one way - Perl - (2008-07-14)
[1841] Formatting with a leading + / Lua and Perl - (2008-10-15)
[1860] Seven new intermediate Perl examples - (2008-10-30)
[1861] Reactive (dynamic) formatting in Perl - (2008-10-31)
[2233] Transforming data in Perl using lists of lists and hashes of hashes - (2009-06-12)
[2405] But I am reading from a file - no need to prompt (Perl) - (2009-09-14)
[2821] Chancellor George Osborne inspires Perl Program - (2010-06-22)
[2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
[3326] Finding your big files in Perl - design considerations beyond the course environment - (2011-06-14)
[3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
[3830] Traversing a directory in Perl - (2012-08-08)
[3839] Spraying data from one incoming to series of outgoing files in Perl - (2012-08-15)
Some other Articles
Python training courses for use with ESRI ArcMap softwareNetiquette for forum newcomersSome more pictures ...File open and read in Perl - modernisationSetting a safety net or fallback value in PerlIntelligent Matching in Perlswitch and case, or given and when in PerlPython - splitting and joining stringsIterating over a Perl list and changing all items