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 under
P207 - Perl - File Handling [3548] Dark mornings, dog update, and Python and Lua courses before Christmas - (2011-12-10)
[3326] Finding your big files in Perl - design considerations beyond the course environment - (2011-06-14)
[2833] Fresh Perl Teaching Examples - part 2 of 3 - (2010-06-27)
[2821] Chancellor George Osborne inspires Perl Program - (2010-06-22)
[2405] But I am reading from a file - no need to prompt (Perl) - (2009-09-14)
[2233] Transforming data in Perl using lists of lists and hashes of hashes - (2009-06-12)
[1861] Reactive (dynamic) formatting in Perl - (2008-10-31)
[1860] Seven new intermediate Perl examples - (2008-10-30)
[1841] Formatting with a leading + / Lua and Perl - (2008-10-15)
[1709] There is more that one way - Perl - (2008-07-14)
[1467] stdout v stderr (Tcl, Perl, Shell) - (2007-12-10)
[1442] Reading a file multiple times - file pointers - (2007-11-23)
[1416] Good, steady, simple example - Perl file handling - (2007-10-30)
[1312] Some one line Perl tips and techniques - (2007-08-21)
[867] Being sure to be positive in Perl - (2006-09-15)
[702] Iterators - expressions tha change each time you call them - (2006-04-27)
[618] Perl - its up to YOU to check your file opened - (2006-02-23)
[616] printf - a flawed but useful function - (2006-02-22)
[255] STDIN, STDOUT, STDERR and DATA - Perl file handles - (2005-03-23)
[114] Relative or absolute milkman - (2004-11-10)
[12] How many people in a room? - (2004-08-12)
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