Leser: 26
if(grep{$a==$_}(1,4,23,44))
1 2 3 4 5
DB<87> print "jo" if ( @a[1,2,3,44]=(),exists $a[1]) jo DB<88> print "jo" if ( @a[1,2,3,44]=(1)x4, $a[1]) jo
2010-01-20T21:14:23 LanX-hashes brauchen i.Allg. weniger platz als arrays
2010-01-20T22:25:29 EscapeWahrscheinlich weil die 'nur' keys und values gespeichert werden müssen - nehme ich mal an.
1 2 3 4 5 6 7
use Perl6::Junction qw(any); ... if ( $a == any(1, 4, 23, 44) ) { ... }
QuoteReturns a true value if any item in LIST meets the criterion given through BLOCK. Sets $_ for each item in LIST in turn:
print "At least one value undefined"
if any { !defined($_) } @list;
Returns false otherwise, or undef if LIST is empty.
all BLOCK LIST
1
2
3
4
5
if ($a =~ m/^(1|3|12|44)$/xms) {
print "matches\n";
}
Performance gegenüber den anderen Lösungen müsste man dann noch kurz benchmarken.
1
2
3
4
sidburn@sid:~$ perl -MPerl6::Junction=any -wle 'print "1.00" == any(1,2,3) ? "yes" : "no"'
yes
sidburn@sid:~$ perl -wle 'print "1.00" =~ m/^(1|2|3)$/ ? "yes" : "no"'
no
1 2 3 4 5 6 7 8 9 10
DB<1> print "1.00" =~ m/^(1|2|3)$/ ? "JA Zahl" : "Nein String"; Nein String DB<2> print 1.00 =~ m/^(1|2|3)$/ ? "JA Zahl" : "Nein String"; JA Zahl DB<3> $a="1.00"; print $a =~ m/^(1|2|3)$/ ? "JA Zahl" : "Nein String"; Nein String DB<4> $a=1.00; print $a =~ m/^(1|2|3)$/ ? "JA Zahl" : "Nein String"; JA Zahl DB<5> $a="1.00"; $a+=0; print $a =~ m/^(1|2|3)$/ ? "JA Zahl" : "Nein String"; JA Zahl
Quotenaja ... man muss halt sicherstellen dass die Variable auch einen Zahl Integer enthält...
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/env perl use strict; use warnings; use Scalar::Util; use Perl6::Junction qw(any); *is_num = \&Scalar::Util::looks_like_number; # Eingabe print "Bitte eine Zahl eingeben: "; chomp( my $input = <STDIN> ); # Prüfen auf Zahl if ( !is_num($input) ) { die "Eingabe ist keine Zahl\n"; } if ( $input =~ m/\Ainf\z/ixms ) { die "Eingabe ist keine Zahl\n"; } # any() test if ( $input == any(1,2,3) ) { print "Benutzer hat 1,2 oder 3 eingegeben.\n"; } else { print "Benutzer hat etwas anderes als 1,2,3 eingegeben.\n"; } # Regex Test if ( $input =~ m/\A(1|2|3)\z/xms ) { print "Benutzer hat 1,2 oder 3 eingegeben.\n"; } else { print "Benutzer hat etwas anderes als 1,2,3 eingegeben.\n"; }
$a+=0