Danke.
Zur Info, es geht. Wobei zu beachten ist, dass
CODE keine
my Variablen deklarieren darf unter Perl 5.8.8. Sonst segfault.
Hier ist mein Problem: Finde alle Wörter, die zu mehr als 50% aus Ziffern bestehen,
wobei "Wort" als Folge von Nicht-Space zu verstehen ist.
Und die Lösung:
1
2
3
4
5
6
7
8
9
10
11
12
sub md {
my $n=$_[0]=~tr!0-9!!/length $_[0];
warn "^N: $_[0], n=$n\n";
$n;
}
print $1 while $ARGV[0]=~/
(?:^|(?<=\s))
(\S+(?=\s|$))
(?(?{md($^N)<=0.5})
\A
)
/gx
Durch die Angabe der Wortbegrenzer wird erreicht, dass
md() pro Wort nur einmal aufgerufen wird und nicht n-fach für jeden Substring.
In neueren Perls sollte man statt
\A vielleicht
(*FAIL) benutzen, der besseren Lesbarkeit wegen.