Alt-CWB-ambs
view release on metacpan or search on metacpan
lib/CWB/CQP.pm view on Meta::CPAN
my $lines = @{$self->{'lines'}};
return $lines # output has already been buffered => ready to read
if $lines > 0;
return undef # no command active => undefined state
unless $self->{'command'};
return $self->_update($timeout); # try to read from CQP process & return number of lines available (NB: line buffer was empty before)
}
## INTERNAL: reset internal status after command has been completed, check that there is no extra output
sub _eol {
my $self = shift;
while ($self->_update > 0) { 1 } # check for any pending output from CQP process
carp "CWB::CQP: Unexpected CQP output after end of command:\n",
map {" | $_\n"} @{$self->{'lines'}},
"(command was: ".$self->{'command'}.")"
if @{$self->{'lines'}} > 0;
$self->{'lines'} = [];
$self->{'command'} = undef; # no active command now
}
lib/CWB/CQP.pm view on Meta::CPAN
my $debug = $self->{'debug'};
$self->_update(-1) # fill line buffer if necessary (blocking mode)
unless @{$self->{'lines'}} > 0;
my $line = shift @{$self->{'lines'}};
if ($line eq '-::-EOL-::-') {
## special line printed by ".EOL.;" marks end of CQP output
print "CQP ", "-" x 60, "\n"
if $debug;
$self->_eol;
return undef; # undef return value marks end of output
}
else {
print "CQP >> $line\n"
if $debug;
return $line;
}
}
=item I<@lines> = I<$cqp>->B<getlines>(I<$n>);
lib/CWB/CQP.pm view on Meta::CPAN
sub getlines {
croak 'USAGE: @lines = $cqp->getlines($n);'
unless @_ == 2 and $_[1] =~ /^-?[0-9]+$/ and wantarray;
my $self = shift;
my $n_lines = shift;
my @lines = ();
if ($n_lines == 0) {
while (my $line = shift @{$self->{'lines'}}) {
if ($line eq '-::-EOL-::-') {
$self->_eol;
push @lines, undef;
}
else {
push @lines, $line;
}
}
}
else {
while ($n_lines != 0) { # if $n_lines < 0, reads complete output of CQP command
while ($n_lines != 0 and @{$self->{'lines'}} > 0) {
my $line = shift @{$self->{'lines'}};
if ($line eq '-::-EOL-::-') {
$self->_eol;
push @lines, undef;
$n_lines = 0;
}
else {
push @lines, $line;
$n_lines--;
}
}
$self->_update(-1) # wait for CQP output to become available (in $self's input buffer)
if $n_lines != 0;
lib/CWB/CQP.pm view on Meta::CPAN
sub exec {
croak 'USAGE: $cqp->exec($cmd);'
unless @_ == 2;
my $self = shift;
my $cmd = shift;
my $debug = $self->{'debug'};
$self->run($cmd);
my @result = $self->getlines(-1);
my $eol = pop @result;
if (defined $eol) {
die "CWB::CQP: INTERNAL ERROR in _exec() -- missing 'undef' at end of command output (ignored)";
push @result, $eol; # seems to be regular line, so push it back onto result list
}
return @result;
}
=item I<@fields> = I<$cqp>->B<getrow>;
=item I<@rows> = I<$cqp>->B<exec_rows>(I<$cmd>);
Convenience functions for reading TAB-delimited tables, which are generated by CQP commands such as B<count>, B<group>, B<tabulate> and B<show cd>.
( run in 1.010 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )