Hallo Christoph
Hier also mein Skript. Die Elemente nach denen gesucht wird,
sind in einer externen Datei „at.list“. Pro Zeile steht da zum
Beispiel: „Gef,Gerasdorf“. Wenn man die Eingabe mit einem
Großbuchstaben beginnt, wird der Ausdruck nur am Wortanfang
gesucht. Ansonsten auch mitten in der Abkürzung.
Aha! Das Skript ist gut und funktioniert auch. Ich habs
mal überflogen und Änderungen notiert, die ich machen
würde. Z.B. würde ich alle „konfigurierbaren“ Parameter
oben in eine Sektion zusammenfassen und die Prüffunktion
ganz weglassen. Ich würde mir vielleicht auch einen extra-Key
für falsche Eingaben definieren (‚FEHLER‘ oder sowas)
und eine entsprechende Nachricht ausgeben.
Hier mal meine Variante (soll keine große Kritik an Deinem
Skript sein, dient nur der Verdeutlichung alternativer
Herangehensweisen). Dein Skript ist ansonsten völlig o.k.
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
Konfiguration:
my $css_loc = ‚/~christoph/screen.css‘;
(my $data_pt = $ENV{SCRIPT_FILENAME}) =~ s{/[^/]+$}{}; # physischen Pfad zu
my $data_loc = „$data_pt/at.list“; # Daten bestimmen, korrekten Pfad setzen
my $q = new CGI; # CGI laden, gleich Parameter extrahieren
my $info = $q->param(‚abbr‘);
$info = ‚Fehler‘ if $info =~ /[^\w]/ || !length $info; # Validierung
die html-Ausgabe auf jeden Fall eroeffnen
print $q->header, $q->start_html(-title=>‚Betriebsstellen‘, -style=>{-src=>$css_loc});
file oeffnen
open my $fh, '[0] =~ /^$info/i ) # entweder
|| ( $info=~/^[^A-Z]/ && $_->[0] =~ /$info/i ), # oder
map [split /\s*,\s*/, $_, 2],
;
close $fh;
bei der Ausgabe kann man gleich $ENV{SCRIPT_NAME} verwenden
print $q->start_form(-method=>‚POST‘, -action=>$ENV{SCRIPT_NAME}),
$q->p(‚Abkürzung:‘),
$q->textfield(-name=>‚abbr‘, -default=>’’),
$q->end_form(), $q->hr();
Ausgabe des gefundenen Textes
print map $q->h3($_->[0]) . $q->p($_->[1]), @ausgabe;
print $q->end_html();
Grüße
CMБ