Schrift
[thread]5719[/thread]

regexp in function chain/pipe: geht '$var =~ s/1/2/;' auch angenehmer?



<< >> 6 Einträge, 1 Seite
samsara
 2003-09-13 02:07
#51583 #51583
User since
2003-09-13
2 Artikel
BenutzerIn
[default_avatar]
Hallo!

Bin der Neue :)

Ich schreibe gerne Code nach dem Schema (nur um ein bloedes Beispiel zu geben):
Code: (dl )
print (reverse sort (split (/:/, $scalar));

Nur macht mir die Perl-Weise des Ersetzens da einen dicken Strich durch die Rechnung, da brauche ich immer mehrere Zeilen:
Code: (dl )
1
2
$scalar =~ s/ich will weg|ich auch//;
print (reverse sort (split (/:/, $scalar));

Also schrieb ich eine subroutine:
Code: (dl )
1
2
3
4
5
sub substitute {
my $string = $_[0]; # geht nur so bei mir
$string =~ s/$_[1]/$_[2]/;
return ($string);
}

Das ganze habe ich auch erweitert, um mehrere reg-exps und Ersetzungen zu uebergeben. (habe meine source nicht hier) Jetzt kann ich schoen:
Code: (dl )
print (reverse sort (split (/:/, (&substitute ($scalar, "ich will weg|ich auch", ""))));

Geht das auch direkt mit den von Perl vorgegebenen Funktionen?

Danke,

Samsara\n\n

<!--EDIT|samsara|1063405014-->
Ishka
 2003-09-13 02:12
#51584 #51584
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Es gibt (soweit ich weiß) keine vorgefertigte Funktion dafür.

Es ist ja ganz nett, seinen Code so zu schreiben, aber spätestens, sobald du fünf hintereinander hast, wird es doch unübersichtlich ;)
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}
samsara
 2003-09-13 02:17
#51585 #51585
User since
2003-09-13
2 Artikel
BenutzerIn
[default_avatar]
Dankeschoen :)
Crian
 2003-09-14 02:04
#51586 #51586
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Ich versteh nicht ganz, was das Problem ist :-)
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
 2003-09-14 05:33
#51587 #51587
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Das war kein Problem, nur eine Frage. samsara wollte halt nicht eine Subroutine extra schreiben, die es bereits vorgefertigt gibt. Nachdem es diese aber nicht gibt (zumindestens meines Wissens) tut er das auch nicht. Damit ist die Frage beantwortet.
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
 2003-09-15 15:11
#51588 #51588
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Aha, danke, dann ist ja alles geklärt :-)
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
<< >> 6 Einträge, 1 Seite



View all threads created 2003-09-13 02:07.