Thread Hashvergleich klappt nicht *war Anfänger Frage (10 answers)
Opened by der_thomas at 2013-09-22 18:11

der_thomas
 2013-09-22 22:14
#170508 #170508
User since
2013-09-07
158 Artikel
BenutzerIn
[default_avatar]
Ich danke euch für die Anmerkungen, den Code von hlubenow werde ich mir morgen genauer ansehen, ein kurzes reinkopieren und starten brachte ein 'Died at perl2.pl line 24.'

Wegen use strict: Ich hatte dieses http://wiki.perl-community.de/Wissensbasis/Perl5Tu... Tutorial so verstanden dass 'use strict' automatisch mit 'use v5.12;' gestartet werden würde ?

Die globale Variable hatte ich ganz vergessen, ja klar auf die kann man verzichten - bin da bei Perl immer noch etwas unsicher wo welcher Typ Gültigkeit hat, daher ...

Ich habe erstmal NUR die '==' durch 'eq' ersetzt (zu dumm, denn dass man da eq verwendet hatte ich schon gelesen, sollte vielleicht nicht parallel noch mit einer anderen Sprachen arbeiten ;) Danke, Raubtier ;)
Komischerweise funktionierte nun fast alles wie gewollt, das einzige war noch dass auf eine Eingabe mit Enter/Return ohne Text nicht immer sofort das Programm beendet wurde sondern die subroutine erneut aufgerufen wurde. Ein Auskommentieren von Zeile 17 löste das Problem aber auch.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/perl
use v5.12;
use strict;
use warnings;

my %daten;

sub datensuchen{
    print "\nLink suchen (Enter = Beenden)\n";
    my $notiz = <STDIN>;
    if ($notiz eq "\n" or $notiz eq ""){
        return};
    if (exists $daten{$notiz}){
        print "\n$daten{$notiz}\n";datensuchen();}
    else {
        print "\nNicht gefunden !!\n";datensuchen();}
    #datensuchen(); 
}

sub datenladen{
    open my $FH, '<', 'links.txt';
        my @liste = <$FH>;
        close $FH;
    for ($_= 0; $_<=$#liste;$_+=2){
        $daten{$liste[$_]} = $liste[$_+1];
        $daten{$liste[$_+1]} = $liste[$_];
    }
}

# main
datenladen();
datensuchen(); 
[code=perl]


Was ich aber überhaupt nicht nachvollziehen kann ist, warum sich dieses 'eq' statt '==' auf den else Zweig in der if Abfrage in Zeile 15-18 auswirkt ?
Setze ich (in Zeile 13) "==" ein wird der else Zweig nie genommen.
Setze ich "eq" ein funktioniert der else Zweig wie gewollt.
Eigentlich dürften die zwei if Anweisungen (Zeile 11 und 13) sich doch gar nicht beeinflussen, täten sie das dürfte die korrekte Ausgabe in Zeile 16 auch nie funktionieren - was sie aber immer tat (auch mit "==" in Zeile 13).

Auch dass ich die Zeile 17 auskommentieren muss damit nach der Eingabe von Enter/Return (ohne Text) immer aus der Subroutine gesprungen wird ist mir unverständlich, denn eigentlich dürfte diese Zeile nie 'angesprungen' werden ?

Es geht mir primär gar nicht mal so sehr darum dass 'dieses' Programm am Ende einsetzbar ist - es geht mir mehr darum warum das nicht so funktioniert wie ich es erwarte - wo also mein Denkfehler ist ;)

View full thread Hashvergleich klappt nicht *war Anfänger Frage