[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: perl + Konfigurationsdatei



Hallo Kai,

Kai Wilke schrieb:

so benutzen:

$domain_name = $meine_daten{domain_name};
$lease_file  = $meine_daten{lease_file};

Geht nicht :(, nicht unter stable und auch nicht unter unstable.

doch, dass geht definitiv, sogar unter Windows ;)

das "Problem" bei dir ist, dass du "use strict;" verwendest, was ja sehr
löblich ist. Dann muss man aber die Variablen "deklarieren", also beim ersten
Mal mit "my" angeben. Deshalb:

my $domain_name = $meine_daten{domain_name};
my $lease_file  = $meine_daten{lease_file};



Mhm. Das Debugging ist auch gewöhnungsbedürftig bei perl.

Trotz (sau-)mäßiger Englischkenntnisse helfen mir die Fehlermeldungen sehr.


[...
Nochetwas - das geht so nicht:

foreach my $key (keys %meine_daten) {
    if ($key = domain_name ) {
        $domain_name = $2;
    }
}

sondern so:

foreach my $key (keys %meine_daten) {
    if ($key eq "domain_name" ) {
        $domain_name = $meine_daten{domain_name};
    }
}

Geht auch nicht.

wegen dem fehlenden "my".

Ich glaube langsam das liegt am Script
insgesamt, weswegen ich es mal an die Mail anhänge. Ist nicht
sonderlich groß. Ich habe ein paar Versuche kommentiert und
unkommentiert drinne stehen lassen.

Wie schon angegeben - ich bin hier in der deutschsprachigen Debian-Liste, weil
ich kein Englisch spreche. Damit kann ich diese englischen Kommentare leider
nicht wirklich verstehen.

Auch wenn es deshalb fast an ein Orakel erinnert, ich würde es mal so
probieren (ungetestet!):

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#!/usr/bin/perl -w
use strict;
use warnings;
$|=1;

###########################################################################
### Globals - you can change these as needed
my $conf_file = "/etc/kwtools/kwdjbdns-update.conf";

### reads the configuration file & makes a hash of what's in there.
sub read_conf_file {
  my %data = ();

  unless (open(CONFFILE,$conf_file)) {
	#`logger -t dns_update.pl error opening configuration file`;
	print STDERR "Can't open configuration file\n";
	exit 1;
  }
  while (<CONFFILE>) {
	  chomp;
	  s/#.*//;
	  s/^\$+//;
	  s/\s+$//;
	  next unless length;
	  my ($var, $value) = split(/\$*=\$*/, $_, 2);
	  $data{$var} = $value;
  }
  close CONFFILE;

  return %data;
}


# wir rufen jetzt die Subroutine auf und erhalten die Werte im Hash
my %meine_daten = &read_conf_file;

# jetzt stecken wir diese in einzelne Variable
my $domain_name    = $meine_daten{domain_name};
my $lease_file     = $meine_daten{lease_file};
my $tinydnspath    = $meine_daten{tinydnspath};
my $dhcp_dnsfile   = $meine_daten{dhcp_dnsfile};
my $static_dnsfile = $meine_daten{static_dnsfile};
my $update_freq    = $meine_daten{update_freq};
my $debug          = $meine_daten{debug};


###########################################################################
### Don't mess with anything below unless you REALLY need to modify the
### code.  And if you do, please let me know, I'm always interested in
### in improving this program.

# Make a pid file
`echo $$ > /var/run/djb_update.pid`;

my $logstr;

# last modified time
my $modtime = 0;

use vars qw (%db %static);

my $version = "1.1.0";

###########################################################################
# Main Loop
while (1) {

 [...]



# bis zum Ende des Scripts noch reinkopieren, was du um 14:03 Uhr gepostet
# hast.

Falls es Fehlermeldungen gibt, diese posten (oder per PM).

Mit freundlichen Grüßen
Hans-Dietrich




Reply to: