[Perl] Probleme mit " Zeichen

S

sparky

Mitglied
Servus, ich hab mal ne Frage zu " bei Perl. Und zwar habe ich folgenden Code:

Code:
  if(open(fileOUT, ">$fileName")) {
    print fileOUT $fileContent;
  }
(soll einfach einen String in eine datei schreiben)

das Problem ist jetzt nur, wenn in dem string $fileContent " Zeichen drin sind, sceint das nicht zu funktionieren? (also die Datei ist nacher zwar da, aber leer).

Meine Frage als Nicht-Perl Kenner, wie kann ich das Problem umgehen, dass auch die " Zeichen in die Datei geschrieben werden ?

EDIT:
folgenden Fehler bekomme ich:
Use of uninitialized value in print at ./wfile.pl line 209.

habe aber eigentlich richtig zuvor die Variable als Funktionsparameter definiert:
my ( $fileName, $fileContent ) = @_;
 
Zuletzt bearbeitet:
close(<FILEHANDLE>);

Hast du die datei auch nachher wieder geschlossen?

Bitte immer ganze "testprogrämmchen" zeigen, dann ist es leichter den fehler zu finden.

gruss, fossy.
 
ok also:

Code:
 $sendBuf = write_file($$cmd{'arg1'}, $$cmd{'arg2'});

dann die sub write_file:
Code:
sub write_file {
  my ( $fileName, $fileContent ) = @_;
  my %data;
  my $ok = "OK";
  my $msg = "data written";
  if(open(fileOUT, ">$fileName")) {
    print fileOUT $fileContent;                           ### das ist zeile 209
   if(!close(fileOUT)) {
      $msg = "NOK";
      $msg = "Cannot close $fileName after writing: $!";
    }
  } else {
    $ok = "NOK";
    $msg = "Cannot open $fileName for writeing: $!";
  }

  $data{'status'} = $ok;
  $data{'message'} = $msg;
  return serialize(\%data);
}

Fehler:
Code:
Use of uninitialized value in print at ./wfile.pl line 209.
 
folgender script läuft bei mir hervorragend
kann so auch keinen fehler sehen.

Code:
#!/usr/bin/perl

$msg = "data written";

$fileName = "testfile.txt";
$fileContent = "testtext";

if(open(fileOUT, ">$fileName")) {
   print fileOUT $fileContent;
   if(!close(fileOUT)) {
    $msg = "NOK";
    $msg = "Cannot close $fileName after writing: $!";
    }
   } else {
  $ok = "NOK";
  $msg = "Cannot open $fileName for writeing: $!";
 }
 print $msg;
 
Hi,
es steht doch in der Fehlermeldung das die Variable $fileContent nicht
initialisiert ist. Was steht den in '@_' ?

Ich vermute mal das der Inhalt aus '@_' in die erste Variable wandert und
$fileContent leer bleibt.

$fileContent einfach mal mit einzeln initialisieren: 'my $fileContent = "" ' .

MfG
sowatt
 
Hi...

in dem Array @_ befinden sich die an die Subroutine übergebenen variablen. Am besten du lässt dir mal den Inhalt den du in $filename und $filecontent übergeben möchtest ausgeben:
Code:
print $_[0]." und ".$_[1]."\n";
Dann müsstest du ja den Namen und den Inhalt ausgegeben bekommen. Vllt. wäre aber auch noch der Rest des Programms interessant, da es sich ja um Referenzen handelt bei den übergebenen werten.
Code:
$sendBuf = write_file($$cmd{'arg1'}, $$cmd{'arg2'});

ciao Exi
 
ahh der 2. Parameter ist wirklich leer.
Dann scheint die unserialize() Fkt. für Perl doch etwas stark buggy zu sein.

Das Script hat mir nen Kollege gebaut, da ich kein Plan von Perl hab :)
Ist eigentlich ein simpler Daemon der ein (unter PHP) serialisiertes Array vom Socket liest, unserialisiert und anhand davon gewisse Operationen macht. Aber die unserialize() Lib für Perl scheint etwas buggy zu sein.
Ich häng mal beide Files dran falls es wen interessiert.

Code:
/* php code zum testen: */
$a = array ('command' => 'cm_writefile', 'arg1' => 'datei.tst, 'arg2' => "Das soll in die Datei!");

$a = serialize($a);

/* und jetzt $a auf den Perl-Socket schreiben */
 

Anhänge

  • sparkServ.pl.txt
    4,9 KB · Aufrufe: 1
  • serialize.pm.txt
    15,8 KB · Aufrufe: 2

Ähnliche Themen

[Perl] Perl OO Methodenaufruf in anderem Objekt

perl script, das Dateien aus einer Liste löscht

"send: Cannot determine peer address" nach Timeout mit UDP Server -Perl Socket eval{}

perl: curl sendet basic anstatt ntlm

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben