Moin Moin !
Etwas umständlich, oder?
my $file = 'pass.txt';
open(FHD, $file) or die "Can't open : $file!\n";
my @lines=<FHD>;
close (FHD);foreach my $array(@lines)
{
chomp($array);
($uid, $passw)=split(/,/,$array);
if ($user_name eq $uid)
{
my $password_length = length($password); # Länge: neues Passwort
^-- weg!
my $passw_length = length($passw); # Länge: altes Passwort
^-- weg!
my $separator = ','; # Trennzeichen
^-- weg!
my $user_id = $uid.$separator.$passw;
^-- weg!
my $user_id_length = length($user_id); # Länge: Gesamt String
^-- weg!
my $string_length = $user_id_length - $passw_length; # Start Koordinate
^-- weg!
substr($user_id, $string_length, $password_length) = $password; # Altes Passwort ersetzten mit neuem
^-- weg!
$line=$uid.','.$password;
# In der Text-Datei einfügen
Du fügst nicht ein, du hängst an!
Ändere innerhalb von @lines, und schreibe dann, nachdem alles erledigt ist, @lines zurück in die Datei.
open(FHD, ">>pass.txt") or die "Can't open : $!\n";
Warum hast Du den Namen hier fest einprogrammiert?
print FHD "$user_id";
print FHD "\n";
close(FHD);
}
}
So in der Art würde ich das schreiben:
open(FHD,"<$file") or die "Can't open $file: $!\n";
my @lines=<FHD>;
close (FHD);
@lines=grep { substr($_,1+length($user_name)) ne $username.',' } @lines; # user ist aus der Liste rauswerfen
push @lines,"$username,$password\n"; # und mit neuem Password anhängen
open(FHD,">$file") or die "Can't open $file: $!\n";
print FHD @lines;
close (FHD);
Es fehlt noch File locking, das überlasse ich Dir zur Übung. ;-)
Alexander
Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"