Beat: Problem mit Tie::file und zeilenende

Beitrag lesen

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

--
Woran ich arbeite:
X-Torah
><o(((°>       ><o(((°>
   <°)))o><                      ><o(((°>o