Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8991[/thread]

Regex Speicher ($1...) leeren



<< >> 5 Einträge, 1 Seite
Gast Gast
 2007-05-10 15:38
#76623 #76623
Hi!

Vorweg: Auch andere Varianten sind Willkommen!


Also: Ich hab' in einer foreach-Schleife einen regulären ausdruck:

Code: (dl )
1
2
3
4
5
foreach $zone (@zones)
{

$lookup = `nslookup $zone $ns1`;
$lookup =~ /^Address:\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/im;


Nun soll geprüft werden, ob eine IP gefunden wurde oder nicht.

Code: (dl )
1
2
3
$ip = defined($1) ? $1 : "No answer";
print $ip;
}


Das würde so gut funktionieren, jedoch:
Nachdem das erste Mal $1 belegt wurde, bleibt dieser gespeichert bis er wieder überschrieben wird! Das heisst, bei allen nachfolgenden Aufrufen ist, auch wenn keine IP gefunden wurde, $1 noch mit dem vorherigen Wert belegt!


Wie kann das sauber gelöst werden?

Gruss
Downlord
renee
 2007-05-10 15:41
#76624 #76624
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
for my $zone (@zones)
{

    my $lookup = `nslookup $zone $ns1`;
    my ($ip) = $lookup =~ /^Address:\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/im;
    print $ip if defined $ip;
}


Nur als zusätzliche Anmerkung: Bitte immer Wiki:[tt]use strict[/tt] verwenden...

Edit: Wenn Du ein "No Answer" haben willst, dann muss die print-Zeile so aussehen:
Code (perl): (dl )
print (defined $ip ? $ip : "No Answer");
\n\n

<!--EDIT|renee|1178797440-->
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/
topeg
 2007-05-10 23:40
#76625 #76625
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
oder:
Code (perl): (dl )
1
2
3
4
5
6
7
8
for my $zone (@zones)
{
  my $lookup = `nslookup $zone $ns1`;
  if($lookup =~ /^Address:\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/im)
  {  print $1  }
  else
  { print 'No answer' }
}
pq
 2007-05-11 12:54
#76626 #76626
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
zur ergänzung: man prüft nach einer regex nie auf $1, eben weil
es nicht zurückgesetzt wird, wenn die regex nicht erfolgreich
war. das führt aber zu folgender lösung: immer auf erfolg der regex
prüfen, wie es schon gezeigt wurde:
if ( m/.../ ) { tu_was_mit $1 }

hmm, eigentlich könnte man das problem mal ins wiki packen,
das wird doch öfter mal gefragt.\n\n

<!--EDIT|pq|1178873741-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2007-05-11 13:12
#76627 #76627
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=pq,11.05.2007, 10:54]hmm, eigentlich könnte man das problem mal ins wiki packen,
das wird doch öfter mal gefragt.[/quote]
Wiki:Habe ich mal angefangen - Ergänzungen willkommen!
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/
<< >> 5 Einträge, 1 Seite



View all threads created 2007-05-10 15:38.