#!/usr/bin/perl
#Warnungen und Fehlemeldungen einschalten
use strict;
use warnings;
#das Script ist UTF-8
use utf8;
#CGI-Modul laden
#und sagen das alles UTF-8 ist
use CGI ( -utf8 );
#Modul um Fehler im Browser ausgeben
use CGI::Carp 'fatalsToBrowser';
#Modul um Dateien sperren zu können. Siehe "flock"
use Fcntl qw(:flock);
#Dateiname
my $storage_file = 'myText.txt';
#Default Wert, wenn nichts eingeben wurde.
my $str = 'Dies ist die Zeile, die verändert werden kann.';
# Das HTML das angezeigt werden soll
my $template = <<'EOHTML';
Hello World
Die nachfolgende Zeile kann Text aufnehmen:
EOHTML
# neue CGI-Instanz erzeugen
my $cgi = CGI->new();
# schauen ob eine Datei mit dem text da ist,
# Daten mit UTF-8 kodierung lesen
if(open(my $fh, '<:encoding(UTF-8)', $storage_file)) {
#Zeilenumbrüche nicht beachten
local $/=undef;
# ganze Datei lesen
$str = <$fh>;
close($fh);
}
# ein string wurde gesendet
if( my $s = $cgi->param('newText') ) {
# Daten übernehmen
$str = $s;
# Datei zum schreiben öffnen, Daten mit UTF-8 Kodierung schreiben
open(my $fh, '>encoding(UTF-8)', $storage_file) or die("ERROR OPEN $storage_file ($!)");
# Datei sperren das nur ein Prozess schreiben darf
flock($fh, LOCK_EX);
# daten schreiben
print $fh $str;
# datei wider freigeben
close($fh);
}
#platzhalter im Template ersetzen
$template=~s/<\!--INSERT_TEXT_HERE-->/$str/g;
$template=~s/INSERT_URL_HERE/$cgi->url()/eg;
#Header ausgeben der Inhalt ist UTF-8
print "Content-Type: text/html; charset=UTF-8\r\n\r\n";
# Ausgabe UTF-8 kodieren;
binmode(STDOUT,'encoding(UTF-8)');
#template ausgeben
print $template;