Fehlersuche
am 04.03.2006 21:16:21 von frankHallo,
ich versuche gerade, in einem Perl-Skript, das ich nicht selber
geschrieben habe, ein paar Erweiterungen anzubringen. Zum Skript
gehören einige (undokumentierte) Perl-Module, und eine der Funktionen,
die von Tpm.pm *nicht* exportiert werden, schien mir genau richtig zu
sein, um mein Problem zu lösen.
Leider klappt es nur halb, sprich, nicht "reproduzierbar". Wenn ich
dieses Tpm.pm verstanden hätte (und dazu auch die objektorientierten
Perl-Features wirklich begriffen hätte), wüßte ich sicher, warum, und
bräuchte hier nicht mehr fragen.
Am liebsten würde ich nun mein Problem lösen und dabei etwas über
Problemlösestrategien lernen, und natürlich über den ganz konkreten
Fehler, den ich gemacht habe. Aber wenn es geht, möchte ich gerne
vermeiden, das ganze Modul Tpm.pm zu verstehen.
Die wesentliche von mir geschriebene Funktion sieht so aus:
sub printFiles {
my ($pkgcat, $LocalTPM)= @_;
my $pkg_header = "% $pkgcat";
my $dom_parser = new XML::DOM::Parser;
my $doc = $dom_parser->parsefile($LocalTPM);
my %SourceFiles = &Tpm::getListField($doc, "SourceFiles");
print $pkg_header . "\n";
print $SourceFiles{text} . "\n";
}
und die getListField-Subroutine in Tpm.pm so:
sub getListField {
my ($doc, $f) = @_;
my %s = getTextField($doc, $f);
my $str = "";
if (defined($s{"text"})) {
$str = $s{"text"};
}
$str =~ s/^\n*//;
$str =~ s/\n*$//;
$str =~ s/\n/ /gomsx;
@{$s{"text"}} = split(" ", $str);
return %s;
}
Die Ausgabe des Programms ist nun für drei verschiedene Werte von
$LocalTPM:
,----
| % fontinst
| ARRAY(0x86463c4)
| % wasysym
|
| texmf-dist/source/latex/wasysym/wasysym.dtx
| texmf-dist/source/latex/wasysym/wasysym.ins
|
| % xkeyval
| texmf-dist/source/latex/xkeyval/xkeyval.dtx
`----
Beim letzten wird also die einzige Datei korrekt ausgegeben, beim
vorletzten kommt eine Leerzeile davor, und beim ersten kommt gleich
Datenmüll. Das sieht nicht gut aus, irgendwas habe ich da ziemlich
falsch gemacht... Die LocalTPM-Dateien schauen natürlich gleich aus -
bei fontinst sollten allerdings gleich 21 Dateien ausgegeben werden:
[...]
texmf-dist/source/latex/wasysym/wasysym.dtx
texmf-dist/source/latex/wasysym/wasysym.ins
Was müsste ich nun tun oder lesen, um weiterzukommen?
Das ganze Skript in der von mir veränderten Form kann man unter
http://svn.debian.org/wsvn/debian-tex/tetex-base/trunk/debia n/tpm2licenses-new.pl?op=file&rev=0&sc=0
bestaunen, die Module liegen in
http://svn.debian.org/wsvn/debian-tex/texlive/trunk/LocalTPM /Tools/?rev=0&sc=0.
Funktionieren tut das ganze allerdings nur, wenn man nicht nur von
diesen SVN-Trees einen Checkout hat, sondern auch noch vom texcatalogue
auf Sarovar...
TIA, Frank
--
> ich wusste mal einen Befehl, der die Ausgabe auf stdout noch zusätzlich
> in eine Datei umlenken konnte... Bitte helft mir auf die Sprünge.
"kaffee" war es nicht.