package Term::TtyRec::Player; use strict; use vars qw($VERSION); $VERSION = '0.03'; use Time::HiRes qw(sleep); use Term::TtyRec; sub new { my($proto, $io, $attr) = @_; my $class = ref $proto || $proto; my %attr = ( speed => 1, nowait => undef, %{$attr || {}} ); # default unless ($io->can('read')) { require Carp; Carp::croak('Usage: Term::TtyRec::Player->new($io)'); } bless { ttyrec => Term::TtyRec->new($io), %attr }, $class; } sub play { my $self = shift; local $| = 1; my $prev; while (my($sec, $text) = $self->ttyrec->read_next) { my $wait = ($sec - $prev) / $self->speed if defined $prev; unless ($self->nowait or ! $prev) { sleep $wait; } print $text; $prev = $sec; } } sub skip_all { my $self = shift; 1 while $self->ttyrec->read_next; } sub peek { my $self = shift; $self->skip_all; while (1) { $self->play; sleep 0.25; } } ### accessor for my $attr (qw(ttyrec speed nowait)) { no strict 'refs'; *{__PACKAGE__. "::$attr"} = sub { my $self = shift; $self->{$attr} = shift if @_; $self->{$attr}; }; } 1; __END__ =head1 NAME Term::TtyRec::Player - playbacks ttyrec data =head1 SYNOPSIS use Term::TtyRec::Player; use FileHandle; # $handle is any IO::* object my $handle = FileHandle->new('file.tty'); my $player = Term::TtyRec::Player->new($handle); # options can be set as hashref my $player = Term::TtyRec::Player->new($handle, { speed => 1, nowait => undef, }); =head1 DESCRIPTION Term::TtyRec::Player playbacks ttyrec recorded data. See L and L for details about ttyrec. =head1 METHODS =over 4 =item new $player = Term::TtyRec::Player->new($handle, \%attr); constructs new Term::TtyRec::Player instance. =item play $player->play(); Plays recorded data on your terminal. =item peek $player->peek(); Plays live-recoded data to your terminal. This method implements ttyplay -p option. =back =head1 AUTHOR Tatsuhiko Miyagawa This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L, L, http://namazu.org/~satoru/ttyrec/ =cut