open() and pipes

Uri Guttman uri at
Wed Aug 2 16:54:22 BST 2006

>>>>> "DC" == David Cantrell <david at> writes:

  DC> On Tue, Aug 01, 2006 at 12:31:08PM -0400, Uri Guttman wrote:
  >> David Cantrell <david at> writes:
  >>> I know that you can't do this ...
  >>> open(FOO, '|program|')
  >>> It just seems odd to me that this functionality is missing and that you
  >>> need to use a module for it.  Given that IPC::Open2 was bundled with the
  >>> very first version of perl5, it seems odd that that functionality wasn't
  >>> just rolled into open() at that time.
  >>> Am I missing something obvious?
  >> yes, 1 handle vs 2.
  >> open only takes one handle for an argument and pipe needs two handles
  >> (for parent and child after forking).

  DC> But FOO isn't really a handle.  It's some kind of magic data structure
  DC> which gets internally resolved to a filehandle.  I can see no reason why
  DC> it couldn't point at seperate *real* filehandles for reading and
  DC> writing.

FOO is a typeglob which refers to a special structure which has a single
handle slot along with scalar, array, hash and a few other slots. so it
can't make that into 2 handles. if you use a typeglob where a handle is
expected the handle slot is used. you can make a ref to that handle slot
with the *FOO{IO} syntax but only 1 handle can be stored there (not
counting the dir handle). so even if you could store 2 handles there is
no syntax to access both of them separately to do reading and writing.


Uri Guttman  ------  uri at  --------
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs  ----------------------------

More information about the mailing list