Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7749[/thread]

do "configfile";: Wie geht das?

Leser: 1


<< >> 8 Einträge, 1 Seite
Gast Gast
 2006-03-01 18:59
#63365 #63365
Ich möchte in meinem Programm verschiedene Einstellungen per Konfigurationsdatei einstellen. Im Perl Cookbook (http://www.oreilly.com/catalog/cookbook/chapter/ch08.html) hab ich gelesen, dass das mit "do" geht. Nun will ich folgendes machen:

my $setting = "";
do "configfile";
print $setting;

Das geht aber nicht und ich muss stattdessen

my $setting = "";
eval `cat configfile`;
print $setting;

benutzen. Im Perl Cookbook hab ich dazu folgendes gefunden:

Quote
As with a file read in using require or use, those read in using do count as a separate and unrelated lexical scope. That means the configuration file can't access its caller's lexical ( my ) variables, nor can the caller find any such variables that might have been set in the file.


Kann mir jemand erklären wie es mit "do" funktioniert? Meine aktuell benutzte Methode mit "eval" und "cat" scheint mir etwas seltsam, denn darüber lese ich im Cookbook:

Quote
We've never actually seen anyone (except Larry) use that approach in production code.
renee
 2006-03-01 19:12
#63366 #63366
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
(String-)eval sollte man vermeiden!

Vielleicht hilft Dir auch http://perl-seiten.privat.t-online.de/html/perl_perl.html weiter...\n\n

<!--EDIT|renee|1141233357-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2006-03-01 19:47
#63367 #63367
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Im Kochbuch gibt es dafür sogar ein extra kapitel.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
while (<CONF>)
{
  chomp;
  s/#.*//; #kein newline
  s/^\s+//; #keine kommentare
  s/\s+$//; #keine führenden whitespaces
  next unless length;
  my ($var, $value) = split(/\s*=\s*/,$_,2);
  $config{$var} = $value;
}


Verarbeitet den aufbau in folgender Schemata:
NAME = WERT
Kommentare sind auch möglich.

das verarbeiten von Variablen innerhalb von dieser Configfile habe ich persönlich wie folgt gelöst:

NAME = Hallo %%NAME%%

nun kannst du es folgendermaßen bearbeiten:
Code: (dl )
1
2
3
4
5
6
7
8
$name = replace($cfg{NAME}, {NAME => "jochen"});
print "hallo $name\n";

sub replace {
  my ($data, $fill) = @_;
  $data =~ s{%%(.*?)%%}{exists($fill->{$1}) ? $fill->{$1} : ""}gse;
  return $txt;
}

ansonsten kannst du die configdaten ja auch in ein modul auslagern. Das ist zwar etwas mehr arbeit, hat aber den vorteil, dass es viel schneller ist als eine datei einzulesen.\n\n

<!--EDIT|Froschpopo|1141236091-->
renee
 2006-03-01 19:50
#63368 #63368
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Fuer Ini-Files gibt es CPAN:Config::IniFiles. Da hat man alles moegliche erschlagen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
esskar
 2006-03-01 22:45
#63369 #63369
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
juhu... ein Saarländer! :) Hi Sebastian.

so geht es:

foo.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
#!/usr/bin/perl

use strict;
use warnings;

our $settings = "";
do "bar.pl";

print "[$settings]\n";


bar.pl
Code: (dl )
$settings = "Test";


Bis demnächst wieder auf der Arbeit! :)
Sargeras
 2006-03-01 23:58
#63370 #63370
User since
2006-03-01
1 Artikel
BenutzerIn
[default_avatar]
Argh, jetzt musste ich mich doch noch registrieren... :) Wieso dürfen Gäste Threads starten, aber nicht in Threads antworten?

Danke für die Antworten! Das mit "our" ist genau das, wonach ich gesucht hab. So hab ich mir das vorgestellt.
(Das mit den ini-Files gefällt mir da nicht so gut, ich möchte in diese Configdatei auch Arrays und Hashes drin speichern, da ist eine plain-Text Datei wohl nicht so gut geeignet.)

Ich suche mir ja jetzt schon seit einigen Wochen meinen Perl-Code bei Google zusammen, aber "our" ist mir komischerweise noch nie über den Weg gelaufen. Da hätte man aber auch selbst drauf kommen können: my - our, klingt logisch :)
esskar
 2006-03-02 09:51
#63371 #63371
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Sargeras,01.03.2006, 22:58]Argh, jetzt musste ich mich doch noch registrieren... :) Wieso dürfen Gäste Threads starten, aber nicht in Threads antworten?[/quote]
Irgendwie müssen wir die User ja ans Board binden. :)

[quote=Sargeras,01.03.2006, 22:58]Ich suche mir ja jetzt schon seit einigen Wochen meinen Perl-Code bei Google zusammen, aber "our" ist mir komischerweise noch nie über den Weg gelaufen. Da hätte man aber auch selbst drauf kommen können: my - our, klingt logisch[/quote]

in alten Perl-Versionen ging das noch so
Code: (dl )
use vars qw( $foo @bar );


Ab 5.6.x (glaube ich), hat man das our eingeführt. Es ist auch noch nicht soweit verbreitet.

Wenn du willst, kann ich dir Bücher mitbringen. Hab ein ganzes Regal voll.\n\n

<!--EDIT|esskar|1141286005-->
nepos
 2006-03-02 10:04
#63372 #63372
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Schau dir eventuell mal CPAN:Config::General an. Das kann auch mit Hashes und Arrays und speichert das ganze in einer Form, die der Apache-Konfig aehnlich ist.
<< >> 8 Einträge, 1 Seite



View all threads created 2006-03-01 18:59.