#!/usr/bin/perl -w use SOAP::Transport::HTTP; use XML::Parser; SOAP::Transport::HTTP::CGI ->dispatch_to('Metaspace') ->handle; package Metaspace; $count = 0; # snipped some irrelevant code sub ls { my ($class, $metas) = @_; my $datadir = "data"; $return = 'listing files matching '.$metas.'
'; opendir(DIR, $datadir) or return "can't open $datadir: $!"; while (defined($file = readdir(DIR))){ if (check_metas("$datadir/$file", $metas)){ $return .= ''.$file.'
'; } } closedir(DIR); return $return.$count; } sub check_metas { my ($file, $metas) = @_; return 0 unless -f $file; my $parser = new XML::Parser(ErrorContext =>2); $parser->setHandlers(Start => \&XML_start_handler, Char => \&XML_char_handler); $parser->parsefile($file); return 1; } sub XML_start_handler { $count++; } sub XML_char_handler { $count++; }