Re: S::P::O and temp files

* Bjoern Hoehrmann wrote:
>  Another issue that needs to be resolved in order to use S::P::O is the
>creation of temporary files. While OpenSP generally supports doing IO on
>strings, the implementation is unusable as it consumes hundreds of times
>the memory the string comsumes. OpenSP also supports reading from file
>descriptors, but this is not portable, e.g. on my Win32 system Perl and
>the XS/OpenSP would use different runtimes and the file descriptor table
>is local to the runtime. Now there are two approaches, one is to rely on
>temporary file names and the other would be to optimize this on systems
>where reading from <OSFD>s is supported. 

This should have been something like

  use strict;
  use warnings;

  use SGML::Parser::OpenSP qw();
  use File::Temp qw();

  # this would be a config setting or somesuch
  our $SUPPORTS_OSFD_READING = 0;

  # high security on systems that support it
  File::Temp->safe_level(File::Temp::HIGH);

  # new parser
  my $p = SGML::Parser::OpenSP->new;

  sub x::new{bless{},shift}
  sub x::start_element{use Data::Dumper; print Dumper\@_}

  # null handler
  $p->handler(x->new);

  # the html to parse
  my $html = "<!DOCTYPE html []><p>...";

  # create temp file, this would croak if it fails, so
  # there is no need for us to check the return value
  my $fh = File::Temp->new();

  # ...
  File::Temp::unlink0($fh, $fh->filename);

  # store content
  print $fh $html;

  # seek to start
  seek $fh, 0, 0;

  if ($SUPPORTS_OSFD_READING) {
      $p->parse_file("<OSFD>" . fileno($fh));
  } else {
      $p->parse_file($fh->filename);
  }

which, I am certain, still contains some minor flaws...

Received on Sunday, 12 September 2004 11:19:14 UTC