PERL / CHAPTER 10
Lexical filehandles and explicit text decoding
IntermediateSeparate file paths, open modes, and encoding policy.
By the end of this chapter
- Use three-argument open
- Distinguish bytes from decoded text
- Check acquisition and close failures
The idea
Three-argument open separates the access mode from the path, preventing a filename from being reinterpreted as a mode or command specification. Use a lexical filehandle so resource scope is visible. Check whether opening succeeded before reading, and define whether an unavailable file is an expected result or a failure that should stop the operation.
A file is bytes until an encoding layer interprets them as text. Choose an explicit decoding policy when the format specifies UTF-8 rather than relying on platform defaults. A line read can include its record separator; chomp removes the configured trailing record separator without deleting arbitrary surrounding whitespace. For output, also check close because buffered writes may fail later than the write call.
use strict; use warnings;
my $source="first\nsecond\n";
open my $fh,"<",\$source or die "open failed";
my $line=<$fh>; chomp $line;
print "$line\n";
close $fh or die "close failed";first
The example uses an in-memory scalar handle, reads one line, and removes its trailing record separator before printing.
Try it yourself
Write a reader contract that specifies UTF-8 decoding and distinguishes an empty file from a failed open.
Use your own editor for this exercise. Runnable challenges on CodeQuest are available for JavaScript, Python, and SQL.
CHECK YOUR UNDERSTANDING