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

Ergebnis einer regexp direkt verwenden

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2008-11-18 16:43
#116370 #116370
Hallo,
Bevor ich mich blamiere, ich habe Perl nie richtig gelernt sondern immer nur woanders abgeschrieben :-)
Eine Sache Wurmt mich aber, entweder bin ich zu blöd (die Frage richtig zu formulieren), oder es geht einfach nicht:

Ich habe einen String in einer Variablen und möchte diesen Text Ändern (z.B. Leerzeichen ersetzen). Ich will das Ergebnis jetzt aber keinen neuen Variablen zuweisen oder die alte ändern, sondern direkt in einer andere Funktion (z.B print, join) weiterverarbeiten.
z.B. :

Code (perl): (dl )
1
2
3
4
5
my $text = "mein Text mit leerzeichen";

printf "mein Text im Original %s\n und jetzt geändert %s", 
    $text,
    ersetze_leerzeichen($text);


Was kann ich jetzt anstelle von ersetze_leerzeichen($text) schreiben. Alle Anleitungen zu regulären Ausdrücken modifizieren die Quellvariable oder interessieren sich für den Wahrheitswert des Ausdrucks.
Irgendwie kann ich es nicht glauben, dass man das nicht direkt verketten kann.

Ich hoffe, ich habe mein Problem verständlich ausgedrückt.
Bis denne,
der Ingenör
pq
 2008-11-18 18:07
#116371 #116371
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2008-11-18 15:43:57--
Code (perl): (dl )
1
2
3
printf "mein Text im Original %s\n und jetzt geändert %s", 
    $text,
    ersetze_leerzeichen($text);


Was kann ich jetzt anstelle von ersetze_leerzeichen($text) schreiben. Alle Anleitungen zu regulären Ausdrücken modifizieren die Quellvariable oder interessieren sich für den Wahrheitswert des Ausdrucks.
Irgendwie kann ich es nicht glauben, dass man das nicht direkt verketten kann.

Code (perl): (dl )
1
2
3
printf "mein Text im Original %s\n und jetzt geändert %s", 
    $text,
    do { local $_ = $text; s/\s+//g; $_ };

die substitution s/// ersetzt nun mal die variable selbst, deshalb musst du zwangsläufig eine kopie erstellen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Hagen
 2008-11-18 23:13
#116377 #116377
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
pq+2008-11-18 17:07:35--
Code (perl): (dl )
1
2
3
printf "mein Text im Original %s\n und jetzt geändert %s", 
    $text,
    do { local $_ = $text; s/\s+//g; $_ };

die substitution s/// ersetzt nun mal die variable selbst, deshalb musst du zwangsläufig eine kopie erstellen.


Hallo pq,

kannst du mir die dritte Zeile etwas näher erklären? Ist das do { ... } vergleichbar mit einer Funktion bzw. wie nennt man das in der Fachsprache?
Gruß
Hagen
pq
 2008-11-19 11:48
#116391 #116391
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Puh, den Fachausdruck dafür kenne ich nicht. Ein do-Block kann vielleicht mit einer Funktion verglichen
werden, die on the fly erstellt und ausgeführt wird. Das letzte Statement wird zurückgeliefert als
Ergebnis. Es ist einfach nur ein Hilsmittel, um mehrere Statements zu einem einzigen Block zu
verketten, um damit wiederum eben in ein anderes Statement eingebettet zu werden.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Gast Gast
 2008-11-19 12:13
#116393 #116393
Hallo pq,

pq+2008-11-18 17:07:35--
Code (perl): (dl )
1
2
3
printf "mein Text im Original %s\n und jetzt geändert %s", 
    $text,
    do { local $_ = $text; s/\s+//g; $_ };

So geht das also, ich hatte es ja schon mit
Code (perl): (dl )
 { ($_=$text) =~ s/\s/_/g }

versucht, in der Hoffnung, dass das mir das einblocken mit "{}" $_ als ergebnis des letzten statements liefert. "do" kannte ich bisher nicht (direkt mal das Dromedar fragen..), und auf den Trick mit dem separaten aufrufen von $_ bin ich auch noch nicht gekommen. Dafür habe ich die Zahl der gefundenen Leerzeichen bekommen :->
Jetzt frage ich mich nur, ob ich das "local" brauche, habbich bisher auch noch nicht benutzt, weil ich irgendwo gelesen habe "Ist (nur) für Leute, die wissen, was sie tun" :-]

... achso my $_ geht nicht.

pq+2008-11-18 17:07:35--
die substitution s/// ersetzt nun mal die variable selbst, deshalb musst du zwangsläufig eine kopie erstellen.

Das ist die Bestätigung, die mir gefehlt hat. Konnte das einfach nich glauben.

pq+2008-11-18 17:07:35--
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"

The violent psychopath will be likely be yourself -- Der Ingenör :-)

Vielen Dank für die Antwort,
Der Ingenör
P.S.: ich hoffe, dass ich diese Tags richtig gesetzt habe, davon habe ich nämlich noch weniger Ahnung....
pq
 2008-11-19 13:30
#116395 #116395
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Gast+2008-11-19 11:13:39--
pq+2008-11-18 17:07:35--
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"

The violent psychopath will be likely be yourself -- Der Ingenör :-)

hm, danke für die blumen...
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
murphy
 2008-11-19 19:01
#116415 #116415
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Gast+2008-11-19 11:13:39--
[...] achso my $_ geht nicht. [...]


Ab Perl 5.10 geht das schon und ist dann auch die sauberere Lösung.
When C++ is your hammer, every problem looks like your thumb.
<< >> 7 Einträge, 1 Seite



View all threads created 2008-11-18 16:43.