Schrift
[thread]10794[/thread]

Nicht enthalten in

Leser: 1


<< >> 8 Einträge, 1 Seite
Gast Gast
 2007-11-14 10:31
#102391 #102391
Hallo Forum,

wie kann ich prüfen ob eine Zeichenkette nicht in einer Variable enthalten ist. Ob sie drinnen ist prüfe ich mit:
Code: (dl )
1
2
3
4
if($var =~ "Peter")
{
echo "Peter ist drinnen";
}


Danke

Peter
renee
 2007-11-14 10:35
#102392 #102392
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
*)
Code (perl): (dl )
1
2
3
4
if( index( $string, "Peter" ) == -1 ){
    # echo gibt es in Perl nicht
    print "Peter nicht enthalten"; 
}


*)
Code (perl): (dl )
1
2
3
4
# man beachte das "!"
if( $string !~ /Peter/ ){ 
    print "Peter nicht enthalten";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
GwenDragon
 2007-11-14 10:38
#102393 #102393
User since
2005-01-17
14747 Artikel
Admin1
[Homepage]
user image
index() ist meist mindestens ca. doppelt so schnell wie der Regex-Match.
Relais
 2007-11-14 10:52
#102395 #102395
User since
2003-08-06
2246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Der Regex-!match ist dafür für Menschen doppelt so flüssig zu lesen. :)
Erst denken, dann posten --
27. Deutscher Perl- u. Raku -Workshop (Termin wird noch gesucht) 2025 in München.

Winter is Coming
nepos
 2007-11-14 11:23
#102396 #102396
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hängt immer davon ab, wie oft der Code ausgeführt wird ;)
Und ob die Variante mit der RegEx unbedingt besser zu verstehen ist, naja :)
#Kein Kommentar
 2007-11-14 17:06
#102415 #102415
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
hmm,
Code (perl): (dl )
1
2
3
unless ($string =~ /Peter/){
        print "Kein Peter da!"
}

würde ja auch gehen, oder?
wär das schneller als die !~ methode?

ich glaub ich muss mir mal ein benchmark besorgen :)
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
renee
 2007-11-14 17:26
#102416 #102416
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ja, das geht auch.

Ich wage zu bezweifeln, dass es da einen Geschwindigkeitsunterschied gibt, aber ich weiß nicht, wie "teuer" ein UNOP ist, denn mal das hier gemacht:

Skript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;

my $string = "Hallo Peter";

if( $string !~ /Peter/ ){
    print "test";
}

unless( $string =~ /Peter/ ){
    print "test";
}


Ausgabe von B::Terse:
Code: (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
LISTOP (0x1941114) leave [1] 
OP (0x1940cf0) enter
COP (0x1941138) nextstate
BINOP (0x1941174) sassign
SVOP (0x1941198) const [2] PV (0x193efd0) "Hallo Peter"
OP (0x19411b8) padsv [1]
COP (0x1940f34) nextstate
UNOP (0x1940f70) null
LOGOP (0x1940f90) and
UNOP (0x1941074) not
PMOP (0x19410b4) match
OP (0x19410f8) padsv [1]
LISTOP (0x1940fb4) scope
OP (0x1940fd8) null [174]
LISTOP (0x1941030) print
OP (0x1941014) pushmark
SVOP (0x1941054) const [3] PV (0x193efac) "test"
COP (0x1940d30) nextstate
UNOP (0x1940d6c) null
LOGOP (0x1940d8c) or
PMOP (0x1940eb0) match
OP (0x1940ef4) padsv [1]
LISTOP (0x1940db0) scope
OP (0x1940dd4) null [174]
LISTOP (0x1940e2c) print
OP (0x1940e10) pushmark
SVOP (0x1940e50) const [4] PV (0x193ef88) "test"


Wichtig sind hier die UNOP-Blöcke nach den COP's
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2007-11-14 21:32
#102423 #102423
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
nepos+2007-11-14 10:23:31--
Hängt immer davon ab, wie oft der Code ausgeführt wird ;)
Und ob die Variante mit der RegEx unbedingt besser zu verstehen ist, naja :)

Auf jeden Fall. Wenn ich Perl-Programme lese, übersetze ich im Unterbewußtsein gleich in eine natürliche Sprache, falls es geht.

$var !~ /Peter/ heißt dann übersetzt "Variable enthält nicht Peter", während index( $string, "Peter" ) == -1 bedeutet "Der Index des ersten Auftretens von Peter in der Variablen ist -1, was soviel bedeutet wie nicht enthalten".

Man möge entscheiden, was besser zu verstehen ist :-)
<< >> 8 Einträge, 1 Seite



View all threads created 2007-11-14 10:31.