Schrift
[thread]12420[/thread]

perlop "eq" (Seite 2)

Leser: 1


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
LanX-
 2008-08-30 04:21
#114111 #114111
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
catweasel+2008-08-29 21:24:41--
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.


Intuitiv ... überall "eq" ?!?
lichtkind
 2008-08-30 04:33
#114113 #114113
User since
2004-03-22
5708 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
erst die eq abfragen das ist schon richtig. das ist auch einer der vorteil des smartmatch der implizit bei given verwendet wird. damit vermeidet man solche probleme von vornhinein.
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
catweasel
 2008-08-30 11:39
#114114 #114114
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
So, hab es mit "given" hingekriegt.
Ich möchte bei allen um Verständnis bitten, die Perl < 5.10 verwenden.*

select / case - Emulierung: Habe ich das gut gemacht?

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



while () {
        print "\nAuswahl: ";
        chomp( my $aw = <STDIN> );

        given ( $aw ) {
                when ( '' ) {
                        print "Keine Eingabe\n";
                }
                when ( /[^\d*]/ ) {
                        print "Ungültige Eingabe\n";
                }
                when ( 0 ) { 
                        print "0\n"; last
                }
                when ( $_ > 0 and $_ < 11 ) { 
                        print "1-10\n"; last
                }
                when ( $_ >= 11 and $_ < 21 ) {
                        print "11-20\n"; last
                }
                default { 
                        print "Ungültige Eingabe\n";
                }
        }
}



* kleiner Scherz
Linuxer
 2008-08-30 11:46
#114116 #114116
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Hi,

Code: (dl )
m/[^\d*]/


Das verwendet die Zeichenklasse für alle Nicht-Ziffern und Nicht-Sterne; willst Du das wirklich?

Oder willst Du evtl. nur

Code: (dl )
m/\D/

das wäre irgendeine Nicht-Ziffer... (also passt auch auf einen String wie "a1" oder "1a"....
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!
catweasel
 2008-08-30 12:06
#114117 #114117
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
Ausgebessert und mit einer "exit"-Abfrage (um mein ursprünliches Problem nicht zu vergessen).
Aber auch bei diesem Konstrukt muss ich die Reihenfolge beachten, wenn ich Fehlermeldungen vermeiden will.
Nochmal ausgebessert (/[\D]/ -> /\D/).

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
34
#! /usr/bin/perl -w
use strict;
use feature ":5.10";



while () {
        print "\nAuswahl: ";
        chomp( my $aw = <STDIN> );

        given ( $aw ) {
                when ( '' ) {
                        print "Keine Eingabe\n";
                }
                when ( 'exit' ) {
                        exit;
                }
                when ( /\D/ ) {
                        print "Ungültige Eingabe\n";
                }
                when ( 0 ) { 
                        print "0\n"; last
                }
                when ( $_ > 0 and $_ < 11 ) { 
                        print "1-10\n"; last
                }
                when ( $_ >= 11 and $_ < 21 ) {
                        print "11-20\n"; last
                }
                default { 
                        print "Ungültige Eingabe\n";
                }
        }
}
Gast Gast
 2008-08-30 14:22
#114119 #114119
"when ( /[\D]/ ) {" Da kannst du die "[]" weglassen, da hier keine Zeichengruppen gebraucht werden.

"\D" ist gleichbedeutend mit "[^0-9]"
catweasel
 2008-08-30 17:32
#114126 #114126
User since
2008-08-29
13 Artikel
BenutzerIn
[default_avatar]
catweasel+2008-08-29 21:28:04--
$#array:

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


verhält sich
Code (perl): (dl )
... if @array;
gleich wie
Code (perl): (dl )
... if scalar @array > 0;
?
MatthiasW
 2008-08-30 19:03
#114137 #114137
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Ja, da @array hier im automatisch im scalar-Kontext ausgewertet wird, und da 0 = false ist, erhälst du das gewünschte Ergebnis.

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



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