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

regex phänomen: regex in gewissen konstellationen



<< >> 2 Einträge, 1 Seite
Gast Gast
 2007-03-06 09:27
#74798 #74798
Hallo Leute,
hier mal ne Frage um die internals in perl...
also hab folgendes snippet
Code: (dl )
1
2
3
4
5
6
foreach (@ini) {
chomp($_);
$i++ if $_ =~ m/path/ig;
(undef,$startwith) = split("=", $_) if $_ =~ m/StartWithLastProfile/ig;
(undef,$profil) = split("=", $_) if $_ =~ m/path/ig;
}

so im endeffekt geh ich eine ini datei durch und suche halt nach pfad angaben und etwas anderen. gleichzeitig lasse ich mir hochzählen wieviele pfadangaben vorhanden sind. in dieser version klappt es.
wenn ich es allerdings so schreibe:
Code: (dl )
1
2
3
4
5
6
foreach (@ini) {
chomp($_);
(undef,$startwith) = split("=", $_) if $_ =~ m/StartWithLastProfile/ig;
(undef,$profil) = split("=", $_) if $_ =~ m/path/ig;
$i++ if $_ =~ m/path/ig;
}

bleibt $i 0 ??? kann mir jemand erklären woran das liegt?? hab schon gesucht aber nix gefunden den selbst die $& variable in der die gefundenen regex inhalte stehen zeigt mir an das es da etwas findet.
genau das selbe problem habe ich bei solchen ausdrücken:
Code: (dl )
my $server = $ARGV[0] =~ m/Firefox/ig ? "K:\\persönlich\\mozilla\\firefox" : "K:\\persönlich\\mozilla\\thunderbird";

wenn ich jetzt danach das selbe wieder mit der variable server mache:
Code: (dl )
my $smth = $server =~ m/Firefox/ig ? "K:\\persönlich\\mozilla\\firefox" : "K:\\persönlich\\mozilla\\thunderbird";

funktioniert das sobald ich diese aber ein 2tes mal mache also zb:
Code: (dl )
my $other = $server =~ m/Firefox/ig ? "K:\\persönlich\\mozilla\\firefox" : "K:\\persönlich\\mozilla\\thunderbird";

kommt immer der pfad für thunderbird auch wenn eig. firefox in $server steht??

womit hängt das zusammen??

danke und mfg
maddin
renee
 2007-03-06 10:27
#74799 #74799
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dass in $& immer noch der Treffer drin steht verwundert nicht, da die Variable bei einem "Nicht-Treffer" nicht geleert wird:

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

use strict;
use warnings;

my $string = "Test Firefox";

print "yes\n" if $string =~ /Firefox/;
print $&,"\n";

print "yes\n" if $string =~ /Gude/;
print $&,"\n";


Das andere Phänomen hat mit dem g-modifier zu tun. Wenn Du
Code: (dl )
1
2
3
4
5
6
foreach (@ini) {
chomp($_);
(undef,$startwith) = split("=", $_) if $_ =~ m/StartWithLastProfile/ig;
(undef,$profil) = split("=", $_) if $_ =~ m/path/i;
$i++ if $_ =~ m/path/i;
}


machst, sollte es funktionieren.
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/
<< >> 2 Einträge, 1 Seite



View all threads created 2007-03-06 09:27.