Frage zu perl unter linux

hallo


folgendes problem, ich habe eine variable "dvd : vdrcd : games : network : mp3 : osdteletext : vcd"

die doppelpunkte habe ich rein machen lassen um eine konstante zu haben um die variable dort zu teilen. theoretsich macht man sowas ja mit dem split befehl, jedoch will das bei mir nicht funktionieren aus was für gründen auch immer.

also wer kann mir erklären wie ich die variable teilen kann in die einzelnen segmente, achja die anzahl der segmente kann variieren.

hier ein auszug aus dem script: "
$quelle = "/var/lib/dpkg/status";
#Datei ?ffnen und einlesen
open(IN,"<$quelle");
@IN = <IN>;
close(IN);
#zeilenweise abarbeiten und filtern
@script = (":");
foreach $line(@IN){
if($line =~ /(vdr.plugin.+)/) {
@plugin = split (/vdr-plugin-/,$1);
@pluginstring = (@plugin, @script);


danke
triton
 
Kleiner Test, dass split() durchaus wie erwartet funktioniert:
Code:
[17:33:25] fmp@nexus:~> perl -e '@bla=split(/:/,"bla:laber:blubb"); foreach $wort(@bla) { print $wort."\n"; }'
bla
laber
blubb

Was bastelst du denn da, ne settop-box?

Greets, Ziri
 
soll eine updatefunktion via osd werden unter vdr

so dein tip funktioniert erst mal gut, zumindest fummelt er mir das etwas auseinander, was jedoch noch fehlt ist das ich zu jedem wert eine variable habe.

sprich bla ne varaible und blubb ne variable.


triton
 
Bahnhof?
Du HAST doch ein Array ... (das du z.B. wie in meinem kurzen testcode mit foreach durchwandern kannst)

Greets, Ziri
 
gerade darum gehts ja, ich weiß nicht wie lang dieser array ist und was dort für wörter drin stehen. ich bräuchte etwas womit der array zerlegt wird und jedem wort eine variable zugeordnet wird.

oder habe ich da jetzt etwas falsch verstanden ?

triton
 
Äh ... *kopfkratz*. Also ... ein Array ist nichts weiter als viele Variablen unter einem Namen und index ansprechbar.
Wenn du wissen musst, wie viele Elemente ein Array hat, liefert $#<name> den index des letzten Elements (der ist n-1 weil bei 0 angefangen wird zu zählen).
Beispiel perl -e '@bla=qw/bla didel laber blubb/; print "$#bla\n";' gibt 3.
Aber wozu musst du das überhaupt wissen?

Greets, Ziri
 
also

folgendes wird beabsichtigt

ich führe zuerts apt-get update aus um evtl neue updates zu suchen

dann kontrolliere ich unter /var/lib/dpkg/status die plugins die bereits auf dem pc/settop box installiert sind.
dies mache ich mit foreach und dabei kommt dan folgendes raus "dvd vdrcd games network mp3 osdteletext vcd", da ich nun jedoch nur das dvd haben möchte muss ich das in eine einzelne variable bringen und da scheitert es bei mir.
sprich ich möchte z.b.

@plugin1 = dvd
@plugin2 = vdrcd
@plugin3 = games
.....

wobei die plugins halt mal mehr oder weniger sein können.


jetzt überprüfe ich obs neue plugins gibt die man installieren könnte, sprich man muss also z.b. wenn es das dvd plugin noch nicht gibt ein kommando von perl ausführen lassen was in etwa so aussieht system "apt-get install @plugin_dvd";

deswegen muss ich halt die einzelnen plugins in einzelnen variablen haben.

triton
 
soooo

also du hattest recht, das problem war nur das es bei mir nicht funktionierte. das problem lag darin das der array aus diversen anderen arrays gebildet wurde, sprich die ":" und die wortwerte. somit hatte mir perl aus dem array immer nur 2 variablen extrahiert, habe das problem nun so gelöst das ich den fertigen array in einer datei speichere und dann wieder auslesen lasse, dann funktioniert es so wie ich es haben will.
aber nochmals danke wegen der supportseite die ist echt gut

triton
 
Zurück
Oben