Schrift
[thread]9104[/thread]

regexp funktioniert erst beim zweiten Lauf



<< |< 1 2 >| >> 14 Einträge, 2 Seiten
dukeofnukem
 2007-06-20 13:23
#77677 #77677
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
Alohá!

Hab mal wieder was aus meiner unbedarften Perspektive sehr Seltsames entdeckt:

Wenn ich beim parsen von XML-Textblöcken folgendes mache:
Code: (dl )
1
2
3
4
5
6
7
8
if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\nSo weit so gut...";
}


if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\nThis is impossible!";
}


funktioniert erst der zweite Aufruf.
Wenn einer allein steht passiert gar nichts, nada.

Die if-regexp matched also nicht oder tut aus mir unerfindlichen Gründen nicht was sie soll. Beim ersten Aufruf. Danach scheint sie sich aus dem Bett bequemt zu haben und packt zu.

Wenn ich einen der identischen Blöcke entferne, passiert wirklich nix, die if-regexp scheint also nicht zu greifen.

Werden regular expressions nicht schon zur compile time gebaut?

Haareraufend,

DoN
drum&bass is a state of mind
pktm
 2007-06-20 13:25
#77678 #77678
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Was steht denn in der Variable drin auf die du matchst?
Benutzt du strict und warnings?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
renee
 2007-06-20 13:32
#77679 #77679
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wie sieht der Code drumrum aus?
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/
dukeofnukem
 2007-06-20 13:34
#77680 #77680
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
Benutze beides, in meinem %xmlstring steht folgendes:
Code: (dl )
    Hzbprtype => qr/<kBPrType[^>]*>\s*52\s*<\/kBPrType>/,


strict und warnings sind natürlich mit von der Partie, vermelden aber nichts.
Der zweite Aufruf klappt ja auch prima...
drum&bass is a state of mind
dukeofnukem
 2007-06-20 13:37
#77681 #77681
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
drumherum sind nur ein paar andere statische regexps die in diesem Block des zu parsenden XMLs nicht matchen können.
drum&bass is a state of mind
dukeofnukem
 2007-06-20 13:41
#77682 #77682
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
werde gleich mal versuchen ein isoliertes script zu schreiben und schauen ob es da dann klappt (Wetten das funxt dann), aber nach dem Essen - bis gleich!
drum&bass is a state of mind
dukeofnukem
 2007-06-20 15:09
#77683 #77683
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
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
28
#!/usr/bin/env perl

use strict;
use warnings;

my @files = @ARGV || glob "*.xml"
or die "No files specified!";

my %xmlstring = (
Hzbprtype => qr/<kBPrType[^>]*>\s*52\s*<\/kBPrType>/,
);

for my $file ( @files ) {
my @cont = do { local(*ARGV, $_, $/); @ARGV = $file; $/ = "</BaseProduct>"; <>; }
if ( -r $file );

for ( @cont ) {

if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\nThis is impossible!";
}


if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\nSo weit so gut...";
}
}
}


Es wird nur das erste print ausgeführt - weigert sich perl die selbe Bedingung zwei Mal zu prüfen? Kann ich mir gar nicht vorstellen, schließlich kann doch im ersten if-block ein statement stehen von dem der zweite Match abhängt.

Und seltsamerweise matched hier eben der erste check und nur der erste, während in meinem anderen code nur der zweite greift...
drum&bass is a state of mind
renee
 2007-06-20 15:41
#77684 #77684
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Poste mal eine Beispiel XML-Datei...
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/
dukeofnukem
 2007-06-20 16:30
#77685 #77685
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
Fürchte da hat mein Auftraggeber was dagegen :-(

Scheint als ob die rexexp nicht immer zur Verfügung steht.
Hab sie leicht modifiziert so daß sie jetzt einen Rückgabewert hat, aber das hat nix geändert.

Aaaber:
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
28
29
30
31
#!/usr/bin/env perl

use strict;
use warnings;

my @files = @ARGV || glob "*.xml"
or die "No files specified!";

my %xmlstring = (
Hzbprtype => qr/<kBPrType[^>]*>\s*52\s*<\/kBPrType>/,
);

for my $file ( @files ) {
my @cont = do { local(*ARGV, $_, $/); @ARGV = $file; $/ = "</BaseProduct>"; <>; }
if ( -r $file );

for ( @cont ) {

if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\n$file\nThis is impossible!";
}

if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\n$file\nThis is impossible too!";
}

if ( /$xmlstring{'Hzbprtype'}/gs ) {
print "\n$file\nSo weit so gut...";
}
}
}


Es klappen check #1 und #3 - dazwischen ist die regexp wohl wieder weg, false oder sonstwas?!?!\n\n

<!--EDIT|dukeofnukem|1182343442-->
drum&bass is a state of mind
dukeofnukem
 2007-06-20 16:43
#77686 #77686
User since
2007-01-15
47 Artikel
BenutzerIn
[default_avatar]
ähja, hab eben zwei Mal geedited, falls einer die alten posts gelesen hat, sorry & *bump*
drum&bass is a state of mind
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-06-20 13:23.