App-Greple-msdoc
view release on metacpan or search on metacpan
lib/App/Greple/msdoc.pm view on Meta::CPAN
my %formatter = (
'indent-xml' => \&indent_xml,
'separate-xml' => \&separate_xml,
);
sub extract_content {
my %arg = @_;
my $file = $arg{&FILELABEL} or die;
my $type = ($file =~ /\.((?:doc|xls|ppt)[xm])$/)[0] or die;
my $pid = open(STDIN, '-|') // croak "process fork failed: $!";
binmode STDIN, ':encoding(utf8)';
if ($pid) {
return $pid;
}
my $format = $arg{format} // $default_format;
if ($format eq 'text') {
print decode 'utf8', to_text($file);
exit;
} elsif ($format =~ /xml$/) {
my $zip = Archive::Zip->new($file);
my @xml;
t/runner/Runner.pm view on Meta::CPAN
use IO::File;
sub run {
my $obj = shift;
use IO::File;
my $pid = (my $fh = new IO::File)->open('-|') // die "open: $@\n";
if ($pid == 0) {
if (my $stdin = $obj->{STDIN}) {
open STDIN, "<&=", $stdin->fileno or die "open: $!\n";
$stdin->fcntl(F_SETFD, 0) or die "fcntl F_SETFD: $!\n";
binmode STDIN, ':encoding(utf8)';
}
open STDERR, ">&STDOUT";
$obj->execute;
exit 1;
}
$obj->{STDIN} = undef;
binmode $fh, ':encoding(utf8)';
$obj->{stdout} = do { local $/; <$fh> };
my $child = wait;
$child != $pid and die "child = $child, pid = $pid";
$obj->{pid} = $pid;
$obj->{result} = $?;
$obj;
}
sub status {
my $obj = shift;
t/runner/Runner.pm view on Meta::CPAN
}
*result = \&stdout; # for backward compatibility
sub setstdin {
my $obj = shift;
my $data = shift;
my $stdin = $obj->{STDIN} //= do {
my $fh = new_tmpfile IO::File or die "new_tmpfile: $!\n";
$fh->fcntl(F_SETFD, 0) or die "fcntl F_SETFD: $!\n";
binmode $fh, ':encoding(utf8)';
$fh;
};
$stdin->seek(0, 0) or die "seek: $!\n";
$stdin->truncate(0) or die "truncate: $!\n";
$stdin->print($data);
$stdin->seek(0, 0) or die "seek: $!\n";
$obj;
}
##
( run in 0.368 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )