IO::Tokenized::Scalar - Extension of IO::Scalar allowing tokenized input


FrameMaker-MifTree documentation Contained in the FrameMaker-MifTree distribution.

Index


Code Index:

NAME

Top

IO::Tokenized::Scalar - Extension of IO::Scalar allowing tokenized input

SYNOPSIS

Top

  my $fh = IO::Tokenized::Scalar->new();
  $fh->setparser([num => qr/\d+/],
                 [ident => qr/[a-z_][a-z0-9_]],
                 [op => qr![+*/-]!,\&opname]);

  $fh->open('tokenfile') || die "Can't open 'tokenfile': $1";

  while ($t = $fh->gettoken()) {
    ... do something smart...
  }

  $fh->close();

NOTE

This is a modified version of IO::Tokenized::File; it has just every occurrence of IO::File replaced by IO::Scalar. The original package is copyright Leo Cacciari; modification by Roel van der Steen <roel-perl@st2x.net>.

DESCRIPTION

Top

IO::Tokenized::Scalar adds the methods provided by IO::Tokenized to IO::Scalar objects. See IO::Tokenized for details about how the tokens are specified and returned.

METHODS

Top

IO::Tokenized::Scalar inherits both from IO::tokenized and IO::Scalar, so that methods from both classes are available to IO::Tokenized::Scalar objects.

IO::Tokenized::Scalar redefines the following methods:

* new([$filename[,@tokens]])

The new method is redefined so as to call both IO::Scalar::new (passing to $filename if it is defined) and IO::Tokenized::new (passing to it the @tokens parameter).

* open($filename)

The open method from IO::Scalar is redefined so that only opening for input is allowed: requestes for other kind of opening are silently converted to opening for input (this is a bug).

SEE ALSO

Top

IO::Tokenized and IO::Scalar.

AUTHOR

Top

Leo Cacciari, <hobbit@cpan.org>

COPYRIGHT AND LICENSE AND LICENSE

Top


FrameMaker-MifTree documentation Contained in the FrameMaker-MifTree distribution.

package IO::Tokenized::Scalar;
use strict;
use base qw(IO::Scalar IO::Tokenized);
use vars qw($VERSION);

use Carp;

$VERSION = '0.05';

# new has the following synopsis:
# IO::Tokenized::Scalar->new([$tokens [,$filename]])

sub new {
  my $class = shift;
  my ($filename,@tokens) = @_;
  my $self = defined $filename ? IO::Scalar->new($filename): IO::Scalar->new();
  $self = IO::Tokenized->new($self,@tokens);
  bless $self,$class;
}

# redefine so that only opening for input is allowed
sub open {
  my $self = shift;
  my ($filename) = @_; #silently ignore other parameters
  $self->SUPER::open($filename,"r");
}

1;

__END__