Schrift
[thread]12420[/thread]

perlop "eq"

Leser: 1


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
catweasel
 2008-08-29 21:58
#114098 #114098
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
Hi,

wie kann man das schreiben, dass es funktioniert:

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
#! /usr/bin/perl -w
use strict;


my @array = qw/ eins zwei drei /;

while ( @array ) {

        my $count = 1;

        foreach ( @array ) {
                print $count++, " ", $_, "\n";
        }
        
        print "Auswahl: ";
        chomp ( my $aw = <STDIN> );
        
        print "\neins\n\n" if $aw == 1;
        print "\nzwei\n\n" if $aw == 2;
        print "\ndrei\n\n" if $aw == 3;
        exit if $aw eq 'exit';
}
lichtkind
 2008-08-29 22:17
#114099 #114099
User since
2004-03-22
5681 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
kannst du fragen stellen die wir verstehen?

im ernst fehlermeldung und ne ansage was du erreichen willst wäre hilfreich.

da ist viel platz zu optimieren.
Code (perl): (dl )
print $count++, " $_\n" for @array;
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
RPerl
 2008-08-29 23:17
#114101 #114101
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Je nachdem welche Version von Perl Du einsetzt koenntest du auch

Code (perl): (dl )
1
2
3
print "\neins\n\n" if $aw == 1;
print "\nzwei\n\n" if $aw == 2;
print "\ndrei\n\n" if $aw == 3;


Durch given / when Ausdruecke ersetzen.

Und wenn Du die Anzahl der Elemente im Array haben moechtest kannst Du direkt auf $#array zugreifen.

VIelleicht hilft's.

greets

r
catweasel
 2008-08-29 23:24
#114102 #114102
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
Ups, es funktioniert - mir ist ein kleiner Fehler beim Testen unterlaufen; (habe chomp hinzugefügt und vergessen, vor dem Ausführen des Scripts zu speichern).

Aber was ich ursprünglich fragen wollte: welche besser Schreibweise gibt es, um diese Fehlermeldung zu vermeiden?

Code: (dl )
1
2
3
4
5
1 eins
2 zwei
3 drei
Auswahl: exit
Argument "exit" isn't numeric in numeric eq (==) at /home/mm/perl/tesdt.pl line 18, <STDIN> line 1.
catweasel
 2008-08-29 23:28
#114103 #114103
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
$#array:

in Perl mach ich das mit
Code (perl): (dl )
scalar @array
catweasel
 2008-08-29 23:29
#114104 #114104
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
Wie geht das mit "given / when"?
Linuxer
 2008-08-29 23:33
#114105 #114105
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
catweasel+2008-08-29 21:28:04--
$#array:

in Perl mach ich das mit
Code (perl): (dl )
scalar @array


Nur nochmal zur Sicherheit und Betonung ;o)

Das sind aber 2 Paar Schuhe.

$#array liefert den Index des letzten Elementes;
scalar @array liefert die Anzahl der Elemente.

In der Regel (Wenn die Nummerierung der Indizes bei 0 beginnt) herrscht da ein Unterschied von 1.

Code: (dl )
1
2
3
4
@array = qw( a b c );

# $#array == 2
# scalar @array == 3
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Linuxer
 2008-08-29 23:40
#114106 #114106
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
catweasel+2008-08-29 21:29:37--
Wie geht das mit "given / when"?


Das ist ein feature in Perl 5.10.
z.B. so:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#! /usr/bin/perl -w
use strict;
use feature ':5.10';

my @array = qw/ eins zwei drei /;

while ( @array ) {

        my $count = 1;
        print $count++, " ", $_, "\n" for @array;
        
        print "Auswahl: ";
        chomp ( my $aw = <STDIN> );
        
        given( $aw ) {
                when ( 1 ) { print "eins\n\n"; }
                when ( 2 ) { print "zwei\n\n"; }
                when ( 3 ) { print "drei\n\n"; }
                default { exit; }
        }
}
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2008-08-30 02:22
#114108 #114108
Quote
Aber was ich ursprünglich fragen wollte: welche besser Schreibweise gibt es, um diese Fehlermeldung zu vermeiden?
Code: (dl )
1
2
3
4
5
1 eins
2 zwei
3 drei
Auswahl: exit
Argument "exit" isn't numeric in numeric eq (==) at /home/mm/perl/tesdt.pl line 18, <STDIN> line 1.


Setze das "exit" vor die anderen Abfragen dann kann "==" keinen Fehler melden.
Alternativ kannst du auch "int($aw)==" schreiben.
Linuxer
 2008-08-30 02:46
#114109 #114109
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Gast+2008-08-30 00:22:04--
Setze das "exit" vor die anderen Abfragen dann kann "==" keinen Fehler melden.
Alternativ kannst du auch "int($aw)==" schreiben.

Hm, und was ist mit anderen Eingaben als "exit", die nicht-numerisch sind?
Die fallen beim '==' wieder auf...

Gast+2008-08-30 00:22:04--
Alternativ kannst du auch "int($aw)==" schreiben.


Auch bei Verwendung von int() wird eine Warnung geworfen:
Code: (dl )
1
2
3
4
5
6
7
8
9
$ perl -lw
use strict;
my $aw = 'rimbel';

if ( int($aw) == 1 ) {
print "aha";
}

Argument "rimbel" isn't numeric in int at - line 4.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2008-08-29 21:58.