perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




11.02.2012 / 23:12

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


Beitragreguläre Ausdrücke
Seitenanfang
Hallo, bin grad bei meiner Schulaufgebenvorbereitung über eine Zeile Perl Code gestolpert, die mir nicht so recht einleuchtet. Veleicht kann mir jemand weiterhelfen.

Was passiert hier?

($pattern=$_ and last) unless ($pattern);

Datum: 22.03.2006-21:15

Beitragre: reguläre Ausdrücke
Seitenanfang
Sie bedeutet:

Verlasse die Schleife wenn es die Variable $pattern nicht gibt* und speichere beim Verlassen den Wert von $_** in $pattern.

*eigentlich bedeutet es wenn $pattern undef,0 oder "" ist.
definiertheit überprüft man mit defined
[http://perldoc.perl.org/functions/defined.html]

**$_ ist eine spezielle Variable die in Schleifen immer
einen Alias für das Element darstellt über das gerade iteriert wird [also da wo die Schleife grad is'])
also
foreach(1,2,3)
{
print '$_=',$_,"\n";
}
gibt
$_=1
$_=2
$_=3
aus

Datum: 22.03.2006-22:04

Beitragre: reguläre Ausdrücke
Seitenanfang
danke erst mal, ich finde folgenden Quellcode aber immernoch seltsam.

while (<>){
chomp;
($pattern=$_and last) unless($pattern);
if (/$pattern/) {
print"Matched:$`<$&> $'\n;
}else {
print "no Match\n";
}
}

ist das so korrekt?

Datum: 22.03.2006-22:34

Beitragre: reguläre Ausdrücke
Seitenanfang
Ja, bis auf 2 kleine Schreibfehler die drin waren. Ich habs dir mal kommentiert. Hier noch n paar Info-Seiten:

http://de.selfhtml.org/perl/sprache/regexpr.htm
http://perldoc.perl.org/perlre.html
http://perldoc.perl.org/perlreref.html

#!/usr/bin/perl -w
use strict;

my $pattern = '\d{3}'; # suchmuster-beispiel : 3 ziffern am stück

while (<>){ # lies von der standardeingabe (kurzform von <STDIN>)
chomp; # entferne whitespace am ende (zeilenumbruch)
($pattern = $_ and last) unless($pattern); # wenn es noch kein pattern gibt : schleife beenden und $_ als $pattern verwenden
if (/$pattern/) { # wenn das suchmuster einen treffer landet
print"Matched:$` <$&> $'\n"; # den teil vor dem treffer,den treffer und den teil nach dem treffer ausgeben
}

else {
print "no Match\n";
}
}

# eingabe von abc123def
# ergibt : Matched:abc <123> def

Datum: 22.03.2006-23:54

Beitragre: reguläre Ausdrücke
Seitenanfang
Achso, verwirrend für dich ist vielleicht auch das Ausnutzen des Standardverhaltens von chomp und dem regulären Ausdruck in dem Beispiel. Wenn sie ohne Argument aufgerufen werden nehmen Sie beide einfach $_ als Argument.

Also macht das Programm eigentlich das:

while (<STDIN>){
chomp $_; #!!
($pattern = $_ and last) unless($pattern);
if ($_ =~ /$pattern/) { #!!
print"Matched:$` <$&> $'\n";
}

else {
print "no Match\n";
}
}

Datum: 23.03.2006-00:00

Beitragre: reguläre Ausdrücke
Seitenanfang
Ok, langsam dämmerts :-). Danke nochmal für die schnelle Hilfe und die ausführliche Erklärung.

Datum: 23.03.2006-13:20

Beitragre: reguläre Ausdrücke
Seitenanfang
#!/usr/bin/perl -w
use strict;

my $pattern;
while (){
while (<>){
chomp;
($pattern = $_ and last) unless($pattern);
if (/$pattern/) {
print"Matched:$` <$&> $'\n";
}
else {
print "no Match\n";
}
}
}

Jetzt hat das Speichern von <STDIN> in $_ für dieses kurze Progrämmchen auch einen Sinn.

Datum: 23.03.2006-20:51

Beitragre: reguläre Ausdrücke
Seitenanfang
Ups!!
Natürlich meine ich das Speichern von $_ in $pattern.

Datum: 23.03.2006-20:54

-






-
-