Klaus Mock: Script geht nicht, windows Registry überprüfen! Please Help!!!

Beitrag lesen

Hallo,

also irgendwie geht das script einfach nicht

Das kann ich mir denken, sieht ziemlich abenteuerlich aus;-)

So wie ich sehe, hast Du Dir die Dokumentation des Moduls nicht gründlich genug angesehen.
Hier ein einfaches Beispiel, das überprüft, ob jemals der Apache-Server installiert wurde:
<sample>
#!c:/perl/bin/perl -w

use strict;
use Win32::TieRegistry( Delimiter=>'/');
print "Apache ist da\n" if($Registry->{'HKEY_LOCAL_MACHINE/Software/Apache Group/Apache'});
</sample>

Du siehst, eighentlich ist es recht einfach. Du bindest das Modul ein,  hier mit dem Delimiter '/'. Danach steht Deinem Script die Registry über die Referenz $Registry zur Verfügung.

Du hast uns zwar den Inhalt der Datei 'data.txt' vorenthalten, aber wenn da irgendwas drinsteht, das wie 'HKEY_LOCAL_MACHINE/Software/Apache Group/Apache' aussieht, dann hast Du eigentlich schon gewonnen.

Du mußt jetzt nur noch die Datei einlesen, in jeder Zeile die Zeilenumbrüche entfernen, und nachsehen, ob $Registry->{$zeile} existiert, so wie ich es oben mit dem Schlüssel für Apache gemacht habe.

open (DATEI, "<data.txt");     # vorhandene TXT mit registry Einträgen

Zugriffe auf externe Resourcen, wie z.B. Dateien, sollten immer auf Erfolg überprüft werden. Also
open(...) or die 'ups, daneben gegangen: '.$!;

@datei = <DATEI>;

Ich weiß nicht woher es kommt, daß jeder immer gleich die ganze Datei einliest. Oft genügt ein
while(<DATEI>)
   {
   # mach was mit $_
   }

close (DATEI);

close(DATEI) or die "verd... die Datei zumachen hat irgendwie nicht geklappt:'.$!;

foreach (@datei)
{
        (@p1) = (//, $_);    # liest den Pfad aus der data.txt
        undef (@p1[@p1-2]);
        $pfadname = join ("", @p1);
        print "Pfadname: $pfadname\n";
        chomp ($_);
        }

Was da genau abläuft will ich, glaube ich, gar nicht wissen:-)
Was soll z.B. das chomp, wenn $_ sowieso gleich wieder überschrieben wird.
Außerdem solltest Du an Deiner Code-Formatierung arbeiten. Deine Einrückungen machen es (vor allem Dir) wirklich schwer, die Struktur des Codes zu erkennen.

$zaehler = 0;      # setzt den zähler auf null

use strict und my hat noch nie geschadet...

foreach $k (keys %vals) {

... Dann hättest Du wahrscheinlich gleich festgestellt, daß es kein Hash namens %vals gibt.

Den Rest lasse ich einmal unkommentiert und komme lieber zu

(hoffe mein Denkansatz war richtig!)

'Das glaube ich nicht, Tim';-)

Grüße
   Klaus