Schrift
[thread]11650[/thread]

$1 auch als Array?



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Froschpopo
 2008-04-16 02:00
#108431 #108431
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Gibts eigentlich für diese Regex-Variablen auch sowas wie ein Array der alle $1, $2, $3 usw. enthält? Also quasi sowas wie @_ und zwar für die "Ersetzen"-Seite!

In etwa so:
Code: (dl )
$foo =~ s/(\d\d)\.(\d)/func(\@vars)/ge; # enthält dann $1 und $2


Ich habe bisher immer die $x-Werte in ein Array gelesen und den dann in einer extr Zeile an func() übergeben. Aber mich würde mal interessieren, ob sowas wie o.g. möglich ist.
KurtZ
 2008-04-16 03:19
#108433 #108433
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
ich habe angefangen perlvar nach dem wort "match" zu durchsuchen, bis mir klar wurde dass du doch für diesen Job besser geeignet bist. *fg*

Ansonsten, vielleicht willste dir ja was mit @- und @+ basteln.
TMTOWTDYOG (there's more than one way to dig your own grave)
murphy
 2008-04-16 03:45
#108434 #108434
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ich würde mal die Dokumentation zu @+, @-, %+ und %- lesen...
When C++ is your hammer, every problem looks like your thumb.
moritz
 2008-04-16 12:01
#108439 #108439
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
und in Perl 6 kann man einfach das Match-Objekt $/ im Listenkontext benutzen ;-)
Froschpopo
 2008-04-16 12:02
#108440 #108440
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
perl -e '$foo = 12345; $foo =~ s/(\d)/func(@+)/ge; sub func { print $_,"\n" for @_ }'


gibt mir aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
1
1
2
2
3
3
4
4
5
5

warum jede Zahl doppelt?
Ist eine von beiden sone art INDEX? Aber wozu das, wenn doch sowieso alles der Reihenfolge nach wiedergegeben wird?

@moritz
Ich freue mich schon riesig auf Perl6. Ich hoffe blos, dass die ganzen CPAN-Module die ich nutze zügig umgestellt werden. Ich vermute ja mal, dass ich dann erst 2010 mein System umstellen kann...
moritz
 2008-04-16 12:07
#108441 #108441
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Lies dir mal perlvar durch, da gibt es bei der Beschreibung von @- ein Beispiel, das verdeutlichen sollte, wie das funktioniert.

$+[0] hat eine Sonderbedeutung, was die Ausgabe erklärt:

Code (perl): (dl )
1
2
3
4
5
6
perl -e '$foo = 12345; $foo =~ s/(\d)/func(@+)/ge; sub func { print "@_\n"  }'
1 1
2 2
3 3
4 4
5 5
Froschpopo
 2008-04-16 12:16
#108442 #108442
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Achso, verstehe! das wird auch nochmal deutlich, wenn man sowas hier versucht:

Code (perl): (dl )
perl -e '$foo = 12345; $foo =~ s/(\d\d)/func(@+[0])/ge; sub func { print "@_\n"  }'

Dann bekommt man
Code: (dl )
1
2
2
4

Es ist quasi immer das Ende des Teilabschnitts.
Aber trotzdem fehlt da jetzt noch der erste Teil (bzw. das was zwischen dem Letzten und dem Ersten liegt, einschließlich den jeweiligen Enden.).

Im obigen Beispiel also:
12
34
KurtZ
 2008-04-16 12:26
#108443 #108443
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
was genau ist dir an der Doku unklar?


PS: Wow ... 200er Beitrag! Stöschen!
TMTOWTDYOG (there's more than one way to dig your own grave)
pq
 2008-04-16 13:02
#108447 #108447
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
moritz+2008-04-16 10:07:59--
Lies dir mal perlvar durch, da gibt es bei der Beschreibung von @- ein Beispiel, das verdeutlichen sollte, wie das funktioniert.

was, lesen? wozu, wenn ers hier erklärt bekommt?
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
GwenDragon
 2008-04-16 15:29
#108459 #108459
User since
2005-01-17
14790 Artikel
Admin1
[Homepage]
user image
froschpopo ist des Englischen nicht so mächtig wie wir wissen. Deswegen hier die Fragen.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2008-04-16 02:00.