#!/usr/bin/perl use v5.12; use strict; use warnings; sub datensuchen { # daten übernehmen # @_ enthält alle Variablen # die an diese Funktion übergeben wurden my $data = shift(@_); # $data enthält eine Refenz auf den hash "daten" # das verändert die Art es Zugriffs auf die Werte im Hash # hier ist eine Refenz nützlich, # da nicht alle Daten aus %daten in @_ kopiert werden # und von da aus in einen neuen Hash ( z.B %data ) # nur der "Verweis" auf die Werte im Hash %daten werden nach $data kopiert print "\nLink suchen (Enter = Beenden)\n"; my $notiz = ; # \n entfernen: chomp($notiz); # variable ist leer. # abbruch ! return 0 if ($notiz eq ""); # zugriff bei einer Referenz ist mit "->" if (exists $data->{$notiz}){ print "\n$data->{$notiz}\n"; } else { print "\nNicht gefunden !!\n"; } return 1; } sub datenladen{ # Kurzschreibweise # "shift" benutzt @_ als variable # wenn nichts angeben wird my $file = shift; my %data; open( my $FH, '<', $file ) or die("ERROR open $file ($!)"); # das lesen mit "while" # ist nicht so Speicherhungrig # # zeile mit dem Key lesen while(my $key = <$FH>) { chomp($key); # weiter wenn $key 0, undef, oder einen leeren String enthält # das kann passieren wenn am Ende ein Wert fehlt # oder zwischendurch leere Zeilen sind, die Keys sein sollten next unless($key); # Zeile mit dem Wert lesen my $val = <$FH>; chomp($val); # werte zuweisen $data{$key} = $val; } # hash zurück geben return %data; } # main # daten laden my %daten = datenladen('links.txt'); # Eingaben Auswerten: while( datensuchen(\%daten) ) { # nächster Durchlauf print "\n---------\n"; }