Variable über Datei Handle weiterreichen, PEARL

  • Ersteller aktivfrühstück
  • Erstellt am
A

aktivfrühstück

Eroberer
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.
 
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
 
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.
 
ok danke.
jup ich meinte pearl.
PERL != PEARL

Ich rede hier von PERL!
Du auch?

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.
Genau so wie man es nicht macht.
Warum hast du meinen Vorschlag ignoriert?

Wahrscheinlich weil du nicht perl meinst. ;)

Gruß Wolfgang
 
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
 
= Setze $var auf das erste Argument welches dem Skript übergeben werden sollte __wenn__ eines vorhanden.
 
Code:
$var=$ARGV[0] if $ARGV[0];
=
Code:
if ($ARGV[0]) {
    $var=$ARGV[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
 
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
 
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...
 
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
 
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;)
 
Zuletzt bearbeitet:
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
 
SUPIIII Jetzt funktionierts.
Diese Lösung habe ich gescuht!!
BESTEN DANK:D
 

Ähnliche Themen

NagiosGrapher 1.7.1 funktioniert nicht

Dateien in Unterordnern finden / Ergebnis in Variable speichern

CGI laesst sich nicht ausfuehren

Zurück
Oben