Schrift
[thread]9079[/thread]

Probleme mit dem Substitutionsoperator



<< >> 7 Einträge, 1 Seite
Gast Gast
 2007-06-10 17:41
#77424 #77424
Hallo,

ich habe ein problem mit dem Substitutionsoperator. Wahrscheinlich ist es nur ein dummer Syntax-Fehler, aber ich blicke allein nicht durch.
Der problematische Ausschnitt ist:
Code: (dl )
1
2
3
4
5
6
7
8
9
while ((my $a, my $b) = each %hash_1) {

while ((my $c, my $d) = each %hash_2) {

$b =~ s/$c/$d/g;

}
...
}



Ich will also für jedes Schlüssel-Element-Paar in hash_1 (also $a und $b) die
innere Schleife ablaufen lassen, in der die Variable $b verändert werden
soll. Genauer gesagt, will ich $c durch $d ersetzen, allerdings funktioniert
es nicht. Beide hashes sind ok, die Variablen sind alle definiert und wenn
ich $c bzw. $d durch einen entsprechenden Wert ersetze, funktioniert diese
Syntax auch.
Bei < $b =~ s/$c/$d/g; > bekomme ich allerdings direkt die Fehlermeldung
"quantifier follows nothing in regex".
Das Problem scheint also bei der Variablen $c zu liegen und es ist bestimmt
ein dummer Syntaxfehler, der mir nicht klar ist. Habe schon einiges
ausprobiert und auch sämtliche Perl-Tutorials durchsucht, doch ich komme
nicht auf meinen Fehler.
Vielleicht kann mir ja einer von Euch sagen, was ich falsch mache.
Gruß

Schon im Voraus vielen Dank!!!!
Linuxer
 2007-06-10 18:15
#77425 #77425
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

interessant wäre dann der Inhalt von $c.

Denn der Inhalt der Variable wird eingesetzt und dann wird der RegEx ausgewertet; wenn nun in $c beispielsweise "*wert*" steht, dann werden die Sterne als Quantifier gewertet; der erste Stern hat aber nichts, auf das er sich beziehen könnte (das Zeichen oder die Gruppe vor dem Stern); dann gibt es diese Fehlermeldung...

Versuch mal das hier:
Code: (dl )
$b = s/\Q$c\E/$d/g;


perlre\n\n

<!--EDIT|Linuxer|1181485021-->
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
holli
 2007-06-10 22:05
#77426 #77426
User since
2003-10-01
6 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du kannst
Code: (dl )
each
nicht schachteln. Benutze
Code: (dl )
for
und
Code: (dl )
keys
, dann funktionierts.
renee
 2007-06-10 22:53
#77427 #77427
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum kann man kein "each" schachteln?

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
C:\>perl
my %hash1 = (1 ,2,3,4,5,6);
my %hash2 = (2,3,4,5,6,7);

while( my ($c,$d) = each %hash1 ){
print $c," .. ", $d,"\n";
while( my ($e,$f) = each %hash2 ){
print " $e .. $f\n";
}
}
^D
1 .. 2
6 .. 7
4 .. 5
2 .. 3
3 .. 4
6 .. 7
4 .. 5
2 .. 3
5 .. 6
6 .. 7
4 .. 5
2 .. 3
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-06-10 22:56
#77428 #77428
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Solange es sich um unterschiedliche Hashes handelt, darf man each verschachteln.
renee
 2007-06-10 23:02
#77429 #77429
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Beim gleichen Hash würde der Iterator eine Position weitergehen, das ist klar...
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/
holli
 2007-06-11 00:45
#77430 #77430
User since
2003-10-01
6 Artikel
BenutzerIn
[Homepage] [default_avatar]
Weil ich

a) blöd

oder

b) übermüdet

bin.

Ich hatte

Code: (dl )
1
2
3
4
5
6
7
8
9
10
%a = (foo => 1, bar => 2);
%b = (goo => 1, dar => 2);

while ( my ($i, $j) = each %a )
{
while ( my ($x, $y) = each %a )
{
print "$i $j $x $y\n";
}
}


als Testcode genommen. Natürlich crasht das -> Endlosschleife. (silly me).

Code: (dl )
1
2
3
4
5
6
7
8
9
10
%a = (foo => 1, bar => 2);
%b = (goo => 1, dar => 2);

while ( my ($i, $j) = each %a )
{
while ( my ($x, $y) = each %b )
{
print "$i $j $x $y\n";
}
}


funzt.
<< >> 7 Einträge, 1 Seite



View all threads created 2007-06-10 17:41.