Hans Watzinger: Spaces beim schreiben einer Datei -> woher kommen die!?!?

Hallöchen =)
Danke fürs herschauen!

DAS SCRIPT

#!/usr/bin/perl

use CGI;
use strict;
use HTML::Template;

print "Content-type: text/html\n\n";

open(INFO, "<info.dat") || die "Error while opening the datafile!\n";
my @info=<INFO>;
close(INFO);

print "Username: -> $info[0]<br>\n";
print "Password: -> $info[1]<br>\n";
print "Birthday: -> $info[2]<br>\n";

print "<br>************************<br><br>";

$info[1]="new_pass\n";

open(INFO, ">info.dat") || die "Error while opening the datafile!\n";
print INFO "@info";
close(INFO);

open(INFO, "<info.dat") || die "Error while opening the datafile!\n";
my @foo=<INFO>;
close(INFO);

print "Username: -> $foo[0]<br>\n";
print "Password: -> $foo[1]<br>\n";
print "Birthday: -> $foo[2]<br>\n";

DIE DATAFILE

Aqua
83245798ghj?lsfdgh94385
11.4.1977

DAS PROBLEM

info.dat auf chmod 666 setzen
as Perl-script auf 755 und dann im Browser 10 mal aufrufen.

Die Datafile ist dann mit Leerzeichen durchsetzt, (gaaanz viele)
jedoch kann ich beim ganzen Schreib-Prozess im Perl-Script
keinen Space finden der stören würde.

Danke für Hilfe
Aqua

  1. Moin.

    print INFO "@info";

    simple Antwort:
    print INFO @info;
    sonst wird ein String geprintet, bei dem @info interpoliert wird. Und Elemente eines Arrays werden per Space getrennt...

    Gruß Frank

  2. Hallo,

    open(INFO, ">info.dat") || die "Error while opening the datafile!\n";
    print INFO "@info";
    close(INFO);

    Wenn du auf diese Art ein Array im Scalaren Kontext verwendest, dann werden die einzelnen Elemente getrennt durch den Inhalt von $`` hintereinandergeschrieben. Infos findest du in perlvar:

    | $LIST_SEPARATOR
    | $``
    |     This is like $, except that it applies to array and slice values
    | interpolated into a double-quoted string (or similar interpreted
    | string). Default is a space. (Mnemonic: obvious, I think.)

    Daher kommen deine Spaces. Bevor du jetzt $`` auf einen anderen Wert setzt solltest du lieber dein Konstrukt ändern. Zum Beispiel:

    print "$_" for (@info);

    Viele Grüße,

    Stefan

    --
    Lass dir das Tanzen NICHT verbieten
    http://petition-tanzverbot.de.vu