Variable über Datei Handle weiterreichen, PEARL

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von aktivfrühstück, 03.05.2007.

  1. #1 aktivfrühstück, 03.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    Hallo an alle

    ICh habe 2 Pearl Dateien verknüpft. Beim Ausführen der einen Datei wird an einer bestimmten Stelle des Programms eine andere Pearl Datei aufgerufen und der Quellcode ausgeführt.
    In folgender Form:
    1.datei

    $akt_geschw=14;
    ...
    Quellcode
    ...
    open(FILE, "| perl /home/Documents/datei2.pl") or die " Fehler: $!\n";
    ...
    ende.

    In der Datei2 befindet sich nun ebnefalls eine Variable $akt_geschw.
    Ich möchte nun den Inhalt der variablen $akt_geschw von Datei1 in die Variable $akt_geschw von Datei 2 kopieren.
    Gibt es eine Möglichkeit dies porblemlos durchzuführen?
    Oder muss ich evt erst den Inhalt von $akt_geschw von Datei 1 in eine Zwischendatei kopieren und in dem Quellcode von Datei 2 diese Zwischendatei wieder aufrufen und dies amn$akt_geschw datei2 zuweisen? was irgendwie umständlich ist:)
    ?( Beste Grüsse aus Paderborn.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 03.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Du redest wirklich von PEARL?

    Wenn du von Perl redest (was ich hier eher vermute), dann übergib die Variable einfach als Wert an das zweite Script.

    Aus diesem kannst du es dann per Übergabeparameter initialisieren.

    Code:
    $var=$ARGV[0] if $ARGV[0]
    Zu PEARL kann ich nichts sagen.

    Gruß Wolfgang
     
  4. #3 aktivfrühstück, 08.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    ok danke.
    jup ich meinte pearl. ich habe nun einfach über ein Filehandle den Wert der Variable in eine Textdatei geschrieben. Diese Textdatei rufe ich dann bei Ausführung des 2ten Skriptes wieder auf und initilaisiere damit die Variable. Das ist zwar umständlich funzt aber:-):))
    greetz.
     
  5. #4 Wolfgang, 08.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    PERL != PEARL

    Ich rede hier von PERL!
    Du auch?

    Genau so wie man es nicht macht.
    Warum hast du meinen Vorschlag ignoriert?

    Wahrscheinlich weil du nicht perl meinst. ;)

    Gruß Wolfgang
     
  6. #5 aktivfrühstück, 09.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    OHH:D :D :D
    grober Anfängerfehler von mir!! NAtürlich meine ich PERL ohne A!! Weiß gar nich wie ich auf das AAA komme und das selber noch die ganze Zeit überlese..ohman...sollte mal wieder auschlafen oder den Kaffee stärker machen;(

    Gut nochma zu $var=$ARGV[0] if $ARGV[0].
    was bedeutet die Zeile? Kannst du mal kurz errläutern? aus meinem Buch werde ich nicht schlau und wenn ich das so eintippe funktioniert das auch nich.
    Also hier steht was mit Kommandozeilenargument?? aber ohne ein if drin?
    greetz:D
     
  7. #6 supersucker, 09.05.2007
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    = Setze $var auf das erste Argument welches dem Skript übergeben werden sollte __wenn__ eines vorhanden.
     
  8. .mike.

    .mike. Doppel-As

    Dabei seit:
    27.08.2006
    Beiträge:
    207
    Zustimmungen:
    0
    Code:
    $var=$ARGV[0] if $ARGV[0];
    
    =
    Code:
    if ($ARGV[0]) {
        $var=$ARGV[0];
    }
    
     
  9. #8 aktivfrühstück, 16.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    hallo ich nochma:-)

    also ich habe jetz meinen plan geändert. ich möchte die datei jetz nicht mehr über ein handle öffnen und ausführen, da er nach der ausführung der datei wieder in dem ursprünglichem skript an der stelle weitermachen soll. Mit dem pipe befehl ist er dann immer am ende des zweiten skripts stehengeblieben...
    ich habe jetzt mit dem require befehl direkt den quellcode eingelesen. Das funzt auch. Die Variablen werden auf den Quellcode angewendet...
    ABER::think:

    das ist ja schön und gut, nur leider ruft perl diese datei nur EINMAL während des programmablaufs auf.
    ich habe aber eine schleife mit mehreren durchläufen und in jedem durchlauf soll die selbe datei mit gleichem require befehl aufgerufen und der quellcode ausgeführt werden.

    gibt es eine möglichkeit perl das aufzuzwingen, dass er jedes mal den quellcode ausführt und nicht nur im ersten schleifendurchlauf??ß

    Oder gibt es einen ähnlichen Befehl, bei dem sich Perl nicht merkt, welche Datei bereits ausgeführt wurde und diese in jedem schleifendurchlauf erneut aufruft?( ?

    greetz
     
  10. #9 Wolfgang, 16.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Sorry, aber ich kann dir nicht mehr richtig folgen, was du da eigentlich machst.
    Ein Codebeispiel ist schon nötig.

    Ich vermute mal, dass du dir da irgentwie etwas verkomplizierst, weil dir die Parameterübergabe nicht klar ist.

    Gruß Wolfgang
     
  11. #10 aktivfrühstück, 16.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    ok also ich habe ein relativ langen quellcode geschrieben. der unter anderem aus mehrern subroutinen besteht.

    ich möchte jetzt der übersichtlichkeit halber dieses quellcode auf mehrere perl dateien aufteilen. (bzw. txt dateien mit quellcode je nachdem was besser wäre?)

    am ende soll aber nur eine perl datei aufgerufen werden, die sich dann an den entsprechenden stellen im quellcode zu den anderen dateien verzweigt und diese abarbeitet.

    und das ist wie mir scheint gar nich so einfach...
    :D zumindest nich für mich...falls sowas überhaupt vorgesehen ist in perl?

    -mein erster Gedanke war es das mit einem HANDLE zu machen.
    -mein zweiter Gedanke evt die require funktion zu nutzen...
     
  12. #11 Wolfgang, 16.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ein Codebeispiel ist zwar nicht zu sehen, aber eventuell möchtest du lieber use verwenden.
    require läd die Module/Dateien erst an Ort und Stelle in den Namespace.
    Das bedeutet, dass die dort definierten Funktionen u.ä. erst nach dem Laden verfügbar sind.

    Du kannst das natürlich auch in eine Schleife einfügen.
    Aber das ist wohl eher overkilll, da der Code ja normalerweise statisch ist.

    Mit require variable Daten zu laden, sollte man tunlichst vermeiden.

    Bin mir nicht sicher, ob ich dein Problem verstanden habe.

    Gruß Wolfgang
     
  13. #12 aktivfrühstück, 21.05.2007
    Zuletzt bearbeitet: 21.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    hi
    also ich versuche es jetz nochmal anhand eines kurzen beispiels zu erklären.
    ich habe 2 dateien.

    Geschwinddikeit in m/s soll in km/h gewandelt werden
    #-----------------------------------
    Datei1
    #----------------------------------
    #start quellcode

    $geschwindigkeit=14; #m/s

    for($i=0; $i<5; $i++, $geschwindkeit++) #soll 5 mal die schleife durchlaufen und jedesmal die geschw. 14m/s um 1 erhöhen und dann in km/h in @erg abspeichern
    {

    --an dieser stelle soll die andere datei aufgerufen werden--
    @erg[$i]=$geschw_km_h;

    }

    #--------------------------
    Datei 2
    #-------------------------
    #start quellcode

    $geschw_km_h=$geschwindigkeit*3.6;

    #ende quellcode datei 2----------------


    Fazit: es soll in der schleife die andere Datei aufgerufen werden. Dann soll die Rechenoperation durchgeführt werden. Dazu ist es aber nötig die Geschwindigkeit als wert mit an die zweite datei zu übergeben.

    Es muss also bei jedem durchlauf der schleife einmal die andere datei aufgerufen werden um die berechnung durchzuführen.
    Und die variablen müssen den dateien beim aufruf übergeben werden.

    Oder ich rufe die datei nich auf sondern hohle mir nur den quellcode wie mit der require funktion.
    Bei der require funktion ist das problem, das er trotz 5maligen schleifendurchlauf nur im ersten Durchlauf die rechenoperation der anderen datei durchführt.

    soi:)

    jetz probier ich erstma use vll wirds ja damit...
    danke für deine gedult;)
     
  14. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  15. #13 Wolfgang, 21.05.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo


    Warum nicht einfach Iteration addieren, oder gleich:
    Code:
    for ($i=$var;$i<=$var+5;$i++){...
    
    Zu dem eigentlichen Problem:
    Warum nutzt du nicht gleich eine Funktion?
    Wenn du diese schon mit require aus einer anderen Datei einbinden willst,
    Dann würde das eher so aussehen.
    Code:
    ### Hauptskript
    require "skript2.pl";
    my @erg;
    my $var=14;
    for ($i=$var;$i<=$var+5;$i++)
    {
    push @erg, speed($i);
    }
    
    ############
    # skript2.pl
    
    sub speed(){
    $_[0] * 3.6;
    }
    1;
    ##############
    
    Wie du siehst, ist die Funktion speed nun in der ersten Datei verfügbar, als wenn sie dort selbst im Code stehen würde.

    Alternativ kannst du auch mit $i=0.. arbeiten, und dann pro Lauf $i zu $var addieren.

    Gruß Wolfgang
     
  16. #14 aktivfrühstück, 23.05.2007
    aktivfrühstück

    aktivfrühstück Eroberer

    Dabei seit:
    19.03.2007
    Beiträge:
    66
    Zustimmungen:
    0
    SUPIIII Jetzt funktionierts.
    Diese Lösung habe ich gescuht!!
    BESTEN DANK:D
     
Thema:

Variable über Datei Handle weiterreichen, PEARL

Die Seite wird geladen...

Variable über Datei Handle weiterreichen, PEARL - Ähnliche Themen

  1. sed suchen und ersetzen mit Variable übergeben?

    sed suchen und ersetzen mit Variable übergeben?: hallo, ich habe folgenden sed-Befehl, der schon super ist und auch alles tut, was er tun soll, nur eben natürlich das $i einfach hinschreibt...
  2. Inhalt einer Variablen aus Batch an Shellscript übergeben

    Inhalt einer Variablen aus Batch an Shellscript übergeben: Hallo, ich komme einfach nicht drauf. Wie kann ich den Wert aus einer Variablen eines Batches an mein Shellscript übergeben? So? #...
  3. MySQL-Abfrage an Variable übergeben

    MySQL-Abfrage an Variable übergeben: Hallo, ich möchte die Ausgabe einer MySQL-Anfrage zeilenweise auswerten und die darin enthaltenen Werte in ein Template schreiben und gegen...
  4. wie Umgebungsvariablen übergeben

    wie Umgebungsvariablen übergeben: Hallo zusammen, ich brauch mal eure Hilfe, weil ich grad nicht weiterkomme. kurz zum Sachverhalt...es gibt ein Oberprogramm(OP) und ein...
  5. Über Linker Skript externe Variablen übergeben

    Über Linker Skript externe Variablen übergeben: Hi, ich habe mich im Rahmen einer Projektarbeit an der Uni mit der "Linker Command Language" beschäftigt und mit dem Umgang des LD's. Als...