klaus: require Anfänger Problem

Hallo,
ich wollte ein formmailcgi mehrsprachig ( mit platzhaltern für die Texte) gestalten und hab dazu mehrere Checkboxen in dem Skript eingebaut. Nach Auswahl der
Sprache wird über ein if Abfrage eine Sprachmodul geladen werden. Das hatte ich über require speech.lib ( darin sind die Texte) probiert und das geht auch beim 1. Mal.

Wenn der Nutzer aber nun eine neue Sprache auswählt wird die neue lib
nicht geladen.

Liegt das daran, dass die alte nun im speicher hängt und ich muss die irgendwie wieder unloaden, oder geht das so garnicht, oder hab ich nur ein Fehler gemacht?

Schonmal Danke für evtl Antworten.

  1. hallo Klaus,

    Liegt das daran, dass die alte nun im speicher hängt

    wie denn das? CGI-Programme werden serverseitig ausgeführt. Auch wenn es sich dabei um ein PERL-Script handelt (was ich annehme), merkt der user in seinem Cache absolut nichts davon, in seinem Browser allerdings sehr viel

    oder hab ich nur ein Fehler gemacht?

    höchstwahrscheinlich. Aber das kann man nur überprüfen, wenn du deinen Code zur Diskussion freigibst und herschreibst oder (besser) als Text-File auf eine temporäre Adresse lädst.

    Christoph S.

  2. Halihallo Klaus

    ich wollte ein formmailcgi mehrsprachig ( mit platzhaltern für die Texte) gestalten und hab dazu mehrere Checkboxen in dem Skript eingebaut. Nach Auswahl der
    Sprache wird über ein if Abfrage eine Sprachmodul geladen werden. Das hatte ich über require speech.lib ( darin sind die Texte) probiert und das geht auch beim 1. Mal.

    Wenn der Nutzer aber nun eine neue Sprache auswählt wird die neue lib
    nicht geladen.

    Liegt das daran, dass die alte nun im speicher hängt und ich muss die irgendwie wieder unloaden, oder geht das so garnicht, oder hab ich nur ein Fehler gemacht?

    Nun, require required eine Datei nur _einmal_. D. h. wenn du zweimal die selbe Datei requirest, dann wird sie nur einmal geladen. Ich glaube, dass die Lösung mit require nicht für dein Problem geeignet ist, da require nicht dazu taugt "Daten" einzulesen, sondern "Code". Für eine genauere Problemanalyse solltest du den Code mal posten, insbesondere wann und wo und wie du die Library einliest (jede Sprache eine andere Library? - Was steht in der Library?)
    Für eine Sprachlibrary tät ich folgendes empfehlen:

    my $language = 'english';
    my %language;
    open( F, '<'.$language.'.lib' );
    while (<F>) {
       my ($text, $translated) = split /=/, 2;
       $language{$text} = $translated;
    }
    close F;

    print $language{'Hallo Welt'};

    gibt dir ein 'Hello World' aus, wenn die Datei english.lib folgendes enthält:

    Hallo Welt=Hello World

    so in etwa wäre das, meiner Meinung nach, wesentlich besser, als mit require.

    Viele Grüsse

    Philipp

  3. Dank euch beiden. Ich habs hinbekommen. Ich velier hin und wieder
     mal den Überblick bei Perl und hangel mich mit Hilfe solcher
     kleinen Listings wie von Philip gepostet dann wieder nach vorn ;)