Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

I wish a good start to the new year to everyone!

I have been reading Damian Conway's Object Oriented Perl book. I have enjoyed it for the most part especially the beginning chapters where I think he does a good job of covering some perl basics. After that, the book is a bit of a struggle probably because I am new to perl and because this book is from 2000 and some of it is definitely out of date. In any case the following code has me perplexed:

sub TIEHANDLE { my ($class, %args) = @_; my $handle = gensym(); my $impl = bless { handle => gensym() }, $class; $impl->OPEN (%args); return $impl; } sub OPEN { my ($impl, %args) = @_; open $impl->{handle}, $args{file} or croak "Could not open '$args{f +ile}'"; $impl->{in_filter} = $args{in} || \&_no_filter; $impl->{out_filter} = $args{out} || \&_no_filter; }

I am confused by something in the subroutine TIEHANDLE. Here is what I think is going on:

The class name ($class) is taken from the list of parameters passed to the subroutine. A hash (%args) is taken from the rest of the parameter list.

Then $handle is assigned to an anonymous glob and therefore becomes a reference to a type glob.

Then $impl is initialized as an object (blessed into the package) referencing an anonymous hash with a key "handle" and value gensym() (creating another reference to a glob).

Then the method OPEN is called using $impl->OPEN (%args)

The $impl object is then returned.

My question is, why do we need the reference "$handle" in the line "my $handle = gensym()"? This reference is not used after this line. In fact a new glob reference is created in the next line in the hash which is blessed. Why do we need $handle at all here? Also I have read the gensym() perldoc and it looks like it is not used anymore although that document is difficult to understand.

In reply to tied file handle, extra variable? by live4tech

Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2023-02-07 17:23 GMT
Find Nodes?
    Voting Booth?
    I prefer not to run the latest version of Perl because:

    Results (40 votes). Check out past polls.