Defining a module with accessor and mutator (get_* and set_*) functions has already been discussed. Another approach is to define iterators to access data. Happily, a file handle is already an iterator (or more accurately, is structured to be used by an iterator like readline). You can define functions in your module to interact with, in this case, a file handle and yet keep it absolutely private. A very simple example:
File use_Getfile_1.pl:
use warnings; use strict; use Getfile; print qq{printing from file }, Getfile->FILENAME, qq{\n}; print Getfile->content; # in list context Getfile->reset; # start again print scalar Getfile->content; print scalar Getfile->content;
File Getfile.pm:
# Getfile.pm package Getfile; use 5.008; use warnings; use strict; use constant FILENAME => 'qwerty.txt'; open my $fh, '<', FILENAME or die qq{opening }, FILENAME, qq{: $!}; sub content { return <$fh>; } sub reset { seek $fh, 0, 0 or die qq{seeking }, FILENAME, qq{: $!}; } 1;
File qwerty.txt:
line 1: The rain in Spain line 2: falls mainly on the plain. line 3: The quick brown fox jumps over line 4: the lazy dog. line 5: How now, brown cow?
Output:
c:\@Work\Perl\monks>perl use_Getfile_1.pl printing from file qwerty.txt line 1: The rain in Spain line 2: falls mainly on the plain. line 3: The quick brown fox jumps over line 4: the lazy dog. line 5: How now, brown cow? line 1: The rain in Spain line 2: falls mainly on the plain.
|
|---|