Skip to Content
Intermediate Perl
book

Intermediate Perl

by Randal L. Schwartz, brian d foy, Tom Phoenix
March 2006
Intermediate to advanced
278 pages
6h 49m
English
O'Reilly Media, Inc.
Content preview from Intermediate Perl

Chapter 8. Filehandle References

We’ve seen arrays, hashes, and subroutines passed around in references, permitting a level of indirection to solve certain types of problems. We can also store filehandles in references. Let’s look at the old problems and the new solutions.

The Old Way

In the olden days, Perl used barewords for filehandle names. The filehandle is another Perl data type, although people don’t talk about it too much since it doesn’t get its own special sigil. You’ve probably already seen a lot of code that uses these bareword filehandles .

open LOG_FH, '>> castaways.log'
        or die "Could not open castaways.log: $!";

What happens if we want to pass around these filehandles so we could share them with other parts of our code, such as libraries? You’ve probably seen some tricky looking code that uses a typeglob or a reference to a typeglob.

log_message( *LOG_FH, 'The Globetrotters are stranded with us!' );

log_message( *LOG_FH, 'An astronaut passes overhead' );

In the log_message( ) routine, we take the first element off of the argument list and store it in another typeglob. Without going into too many details, a typeglob stores pointers to all the package variables of that name. When we assign one typeglob to another, we create aliases to the same data. We can now access the data, including the details of the filehandle, from another name. Then, when we use that name as a filehandle, Perl knows to look for the filehandle portion of the typeglob. We’d have a much easier time if ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Perl Debugged

Perl Debugged

Peter Scott, Ed Wright
Think Perl 6

Think Perl 6

Laurent Rosenfeld, Allen B. Downey
Beginning Perl

Beginning Perl

Curtis Ovid Poe
Pro Perl

Pro Perl

Peter Wainwright

Publisher Resources

ISBN: 0596102062Supplemental ContentErrata Page