my @speichern = ($username, $name, $alter, $sonstiges);
open (LIST, "<liste.txt");
open (LIST, ">", "liste.txt") or die("Zugriff verweigert $!");
print LIST join ", ","@speichern";
warum "@array" ???
close LIST;
Wichtig: Deine Datei besteht aus nur einer Zeile, die zudem nicht durch ein Linefeed abgeschlossen ist.
Das sieht dann in der txt datei genau so aus:
###############################################
Username, Name, Alter, Sonstiges
(noch ist hier keine neue zeile!)
###############################################
Also man könnte den text genauso selbst reinschreiben und dennoch klappt es nicht also hat es damit schon einmal nichts zu tun.danach will ich es auslesen und ändern:
#!/usr/bin/perl
use warnings;
use strict;
use Tie::File;open (LIST, "<liste.txt");
while (<LIST>) {
my @ke = split /, /, $_;(wenn ich jetzt die einzelnen werte aufzähle funktionieren alle
$ke[0] = Username
$ke[1] = Name
..
$ke[3] = Sonstiges
usw.)
(jetzt zum aendern:)my $ersetzen = <STDIN>; #hier kommt der text rein den ich gegen das wort ersetzen möchte
chomp $ersetzen;my $open = "liste.txt";
tie my @aenderung, 'Tie::File', $open;
mach mal:
print scalar @aenderung;
Der Array @aenderung enthält die Elemente, welche durch den in Tie::File verwendeten recsep ("\n") definiert werden. Da du kein "\n" hast hast du genau ein Array Element.
for (@aenderung) {
if ($_ =~ m/Username/) { #hier such ich nach dem usernamen den ich bearbeiten will
s/$aenderung[3]/$ersetzen/g;
Die Bedingung $_ eq $aenderung[3] ist genau beim dritten Element des Arrays erfüllt. Weil dein File aber nur aus einer Zeile besteht, tritt der Fall nie ein. $aenderung[3] ist undefined
Ürigens gilt: manipuliere nie ein Arrayelement, über welches du gerade iterierst, sondern nur den Alias des gegenwärtige Elements.
aber vielleicht meinst du auch $ke[3]
}
untie @aenderung;
}
close LIST;
Bitte teste deinen Code, bevor du hier postest.
mfg Beat