Fehlersuche

Fehlersuche

am 04.03.2006 21:16:21 von frank

Hallo,

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:




wasysym
[...]

texmf-dist/source/latex/wasysym/wasysym.dtx
texmf-dist/source/latex/wasysym/wasysym.ins

Package/wasysym




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.

Re: Fehlersuche

am 05.03.2006 12:19:40 von Slaven Rezic

Frank Küster writes:

> Hallo,
>
> 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.
>

Zum Debuggen von komplexen Datenstrukturen empfehle ich Data::Dumper:

use Data::Dumper;
warn Dumper \%SourceFiles;

Dann weißt du wenigstens, wie die Variable aufgebaut sein kann.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de
Tired of using file selectors? Real programmers use the TAB key for
completion and not for jumping around. Try
http://search.cpan.org/search?mode=module&query=Tk::PathEntr y

Re: Fehlersuche

am 06.03.2006 02:14:15 von frank

Slaven Rezic wrote:

> Zum Debuggen von komplexen Datenstrukturen empfehle ich Data::Dumper:
>
> use Data::Dumper;
> warn Dumper \%SourceFiles;
>
> Dann weißt du wenigstens, wie die Variable aufgebaut sein kann.

Dankeschön - es war ein ganz blöder Fipptehler...

Gruß, 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.