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

Globale Suche



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Free Faq
 2004-07-27 19:17
#85006 #85006
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Normal schreibt man ja:
Code: (dl )
$test =~ s/suchen/ersetzen/g;


Würde das viel ausmachen, wenn ich statt dessen folgendes schreiben würde?:
Code: (dl )
1
2
3
while (1) {
$text =~ s/suchen/ersetzen/;
}

Man müsste hier eben noch eine Abfrage einbauen, um die Schleife zu beenden, aber das spielt jetzt hier keine Rolle.

Es geht mir schlussendlich darum, ob das soo viel langsamer (oder schneller??) wäre als das obere Script.
Ich will die Texte, die ersetzt werden druchnummerieren.
Das würde ich dann durch inkrementieren in der Schleife machen.
Haut mich nicht, ich bin ein Noob!
Ishka
 2004-07-27 19:24
#85007 #85007
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
ja, das macht das viel Langsamer, weil er dann jedesmal von vorne anfangen muß.
Aber vielleicht hilft dir das ja weiter:
Code: (dl )
1
2
3
4
my $test="Hallo Welt -- oder so, solange ein paar os vorkommen\n";
my $i=0;
$test=~s#o#"(".$i++.")"#ge;
print $test;# Hall(0) Welt -- (1)der s(2), s(3)lange ein paar (4)s v(5)rk(6)mmen

ps: s### hat auch nen rückgabewert - und der ist wahr, falls ersetzt wurde und sonst falsch (ich glaube sogar immer identisch mit dem, was m## zurückgeben würde (das ja Listen zurückgibt), bin mir da aber grad nicht sicher und will auch net austesten ;) )\n\n

<!--EDIT|Ishka|1090941996-->
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
renee
 2004-07-27 19:25
#85008 #85008
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das schreit nach einem Benchmark ;)

Wenn Du noch etwas anderes vorhast als "nur" das Ersetzen, dann ist natürlich eine Schleife sinnvoll...
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/
esskar
 2004-07-27 19:26
#85009 #85009
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
while (1) {
$text =~ s/suchen/ersetzen/;
}


ist wohl lansgamer; wenn du durchnummerieren willst, kannst du ja mal folgendes testen; (habs nicht ausprobiert)

Code: (dl )
1
2
3
4
5
6
7
8
9
use strict;

my $text = "ich ich ich ich ich ich";
my $c = 0;
my $du = "du";

$text =~ s!ich!$c++.$du!ge;

print $text;


PS: ishka war schneller :)\n\n

<!--EDIT|esskar|1090942097-->
kabel
 2004-07-27 19:27
#85010 #85010
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
[quote=renee,27.07.2004, 17:25]Das schreit nach einem Benchmark ;)[/quote]
son mist, ich hoer nix ;-)
-- stefan
Ishka
 2004-07-27 19:27
#85011 #85011
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=renee,27.07.2004, 17:25]Das schreit nach einem Benchmark ;)

Wenn Du noch etwas anderes vorhast als "nur" das Ersetzen, dann ist natürlich eine Schleife sinnvoll...[/quote]
nix Benchmark:
s###g -> Laufzeit komplexität_re * length(string)
1 while s### -> Laufzeit komplexität_re * length(string) * anzahl_treffer/2
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Crian
 2004-07-28 16:01
#85012 #85012
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
[quote=Free Faq,27.07.2004, 17:17]
Code: (dl )
1
2
3
while (1) {
$text =~ s/suchen/ersetzen/;
}
[/quote]
Das läuft schlicht ewig, da die Bedingung 1 immer erfüllt ist. Oder hab ich irgendwas wesentliches nicht gesehen?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Ishka
 2004-07-28 16:22
#85013 #85013
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Free Faq,27.07.2004, 17:17][...]
Man müsste hier eben noch eine Abfrage einbauen, um die Schleife zu beenden, aber das spielt jetzt hier keine Rolle.
[...][/quote]
hast du
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Free Faq
 2004-07-28 18:31
#85014 #85014
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
[quote=Crian,28.07.2004, 14:01][quote=Free Faq,27.07.2004, 17:17]
Code: (dl )
1
2
3
while (1) {
$text =~ s/suchen/ersetzen/;
}
[/quote]
Das läuft schlicht ewig, da die Bedingung 1 immer erfüllt ist. Oder hab ich irgendwas wesentliches nicht gesehen?
[/quote]
Es ging mir ja nur ums Prinzip.
Hatte den Code auch noch nicht weiter entworfen und wollte nur darstellen, was ich vor habe.

Werde mir mal die Codeschnipsel von Ishka und esskar am Wochenende mal angucken.
Wenn das tut,... wäres mal nicht schlecht!
Müsste mal ausprobieren, ob man das auch irgendwie mit keys oder values eines Hashes verwenden kann. Werd das aber selbst mal Probieren, wenn ichs nciht schaffe, meld ich mich den schon noch :)\n\n

<!--EDIT|Free Faq|1091025149-->
Haut mich nicht, ich bin ein Noob!
Ishka
 2004-07-28 19:40
#85015 #85015
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=Free Faq,28.07.2004, 16:31][...]
Müsste mal ausprobieren, ob man das auch irgendwie mit keys oder values eines Hashes verwenden kann. Werd das aber selbst mal Probieren, wenn ichs nciht schaffe, meld ich mich den schon noch :)[/quote]
kann man. Du kannst da drin sogar beliebigen Code ausführen. Und ab perl 8.6.irgendwas kannst du auch im matchingteil Code ausführen, wobei der ann jedesmal ausgeführt wird, wenn geschaut wird, ob das da gerade passt.

Bei dem e-Flag wird halt das links mit dem Rückgabewert von rechts ersetzt. Bei zwei es hinten dran, wird der dann nochmal evalt. $var=~s#<(.*?)>#$1#eeg würde zum Beispiel allen Code in $var ausführen, der in <> (in $var) steht ;)
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2004-07-27 19:17.