Schrift
[thread]6048[/thread]

Ersatz fuer "IN"?: Pascal:if (i in (LISTE)then PERL?



<< >> 9 Einträge, 1 Seite
mohk
 2004-01-29 14:10
#79642 #79642
User since
2003-09-16
6 Artikel
BenutzerIn
[default_avatar]
Ich suche einen Perlcode der mir das :IN: aus Pascal ersetzt.

if (i in ('str1','str2','str3','str4')) then ...

leider gibt es IN in Perl nciht (bekam jedenfalls ne Fehlermedlung)
und einzeln mit oder abfragen ist bei ca. 20 listelementen nicht drin ( if (($i eq 'str1')||($i eq 'str2') ...){})
mohk
 2004-01-29 14:15
#79643 #79643
User since
2003-09-16
6 Artikel
BenutzerIn
[default_avatar]
Ich NUB habs grad selber gefunden:

if('teststr' eq 'str1','str2','str3','str4'...){}

--
Dieser Code funzt nicht! Bitte nicht nutzen..\n\n

<!--EDIT|mohk|1075378937-->
kabel
 2004-01-29 14:19
#79644 #79644
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
if (scalar (grep {/$i/} @lst)) { ...}

erklärung:
grep {/$i/} @lst liefert die elemente aus @lst, die auf den regulären ausdruck /$i/ passen.
scalar erzeugt den skalaren kontext. eine liste im skalaren kontext ist die anzahl der elemente in der liste.
scalar (grep {/$i/} @lst) ist also die anzahl der elemente in @lst, die auf /$i/ passen.

der gepostete code macht NICHT das was du willst. deparse mag den code auch nicht wirklich ... hmm ...
das scheint mehr zu einer liste zu evaluieren, die dann im boolschen kontext immer wahr ist.

???

edit: du willst wohl eher { $_ eq $i} im grep code-block.\n\n

<!--EDIT|kabel|1075378891-->
-- stefan
mohk
 2004-01-29 14:27
#79645 #79645
User since
2003-09-16
6 Artikel
BenutzerIn
[default_avatar]
Der gesuchte Code war:

if (scalar (grep {$_ eq $suchstr} ('a','b','x','t'))){
print"worx";
}else{
print"don't";
}

Danke fuers prompte Antworten.
eisbeer
 2004-01-29 14:40
#79646 #79646
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht ne exotische Variante:
Code: (dl )
1
2
3
4
5
6
7
$delm  = ';;';
@array = ('val1','val2','IchTanzeAusDerReihe','val4','val5');
$such  = 'IchTanzeAusDerReihe';

unless (index( $delm.join($delm,@array).$delm, $delm.$such.$delm ) == -1 ) {
  print "Gefunden ... !";
}


Code: (dl )
1
2
3
Benchmark: timing 1000000 iterations of grep, index...
    grep: 11 wallclock secs (10.22 usr +  0.00 sys = 10.22 CPU) @ 97895.25/s (n=1000000)
    index:  2 wallclock secs ( 2.28 usr +  0.00 sys =  2.28 CPU) @ 438020.15/s (n=1000000)
\n\n

<!--EDIT|eisbeer|1075380237-->
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
kabel
 2004-01-29 14:46
#79647 #79647
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
sehr schön auch zu lösen mit CPAN:set-scalar
Code: (dl )
1
2
my $s = Set::Scalar->new (@lst);
if ($s->contains ($i)) { ... }
-- stefan
esskar
 2004-01-30 07:19
#79648 #79648
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=eisbeer,29.01.2004, 13:40]Vielleicht ne exotische Variante:
Code: (dl )
1
2
3
4
5
6
7
$delm  = ';;';
@array = ('val1','val2','IchTanzeAusDerReihe','val4','val5');
$such  = 'IchTanzeAusDerReihe';

unless (index( $delm.join($delm,@array).$delm, $delm.$such.$delm ) == -1 ) {
  print "Gefunden ... !";
}


Code: (dl )
1
2
3
Benchmark: timing 1000000 iterations of grep, index...
    grep: 11 wallclock secs (10.22 usr +  0.00 sys = 10.22 CPU) @ 97895.25/s (n=1000000)
    index:  2 wallclock secs ( 2.28 usr +  0.00 sys =  2.28 CPU) @ 438020.15/s (n=1000000)
[/quote]
Code: (dl )
1
2
3
4
5
6
7
$delm  = ';;';
@array = ('val1','val2','IchTanze','AusDerReihe','val4','val5');
$such = 'IchTanze;;AusDerReihe';

unless (index( $delm.join($delm,@array).$delm, $delm.$such.$delm ) == -1 ) {
print "Gefunden ... !";
}


und jetzt? :)
eisbeer
 2004-01-30 07:35
#79649 #79649
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Genau deshalb hab ich ja die variable $delm gesetzt,
das man da was möglichst sinnloses reinschreibt, was
nicht in dem string vorkommt.
man kann natürlich auch sowas nehmen:
Code: (dl )
1
2
3
4
5
$delm  = 'HuraHaglKruzifixImHimmelAberAu';

oder

$delm = '...-...-...';

Ich nehm' an, sowas kommt in so strings eher
selten vor ;)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
eisbeer
 2004-01-30 07:35
#79650 #79650
User since
2003-08-29
347 Artikel
BenutzerIn
[Homepage] [default_avatar]
Oder man escaped diesen delemiter davor einfach ...
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
<< >> 9 Einträge, 1 Seite



View all threads created 2004-01-29 14:10.