das eine hat mit dem anderen nix zu tun;
es wird wie gesagt, @zahlen ausgewertet, und in @zahlen landen eben die gematchten sachen die in Klammern stehen, auch dann, wenn nicht der komplette ausdruck matcht => !~ gibt "" zurück, wenn unwahr, oder "true" wenn wahr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
sub echo
{
my ($text, @array) = @_;
print "$text :";
print " [", (join "][", map { defined $_ ? $_ eq "" ? "leer" : $_ : "undef" } @array ), "]\n";
}
$muster = '(\d)\.([^\D])';
$text = 4.12;
if (@zahlen = $text =~ m/$muster/)
{ echo "(1) wahr", @zahlen}
else
{echo "(1) falsch", @zahlen}
if (@zahlen = $text !~ m/$muster/)
{echo "(2) wahr", @zahlen}
else
{echo "(2) falsch", @zahlen}
$text = 4.0;
if (@zahlen = $text =~ m/$muster/)
{echo "(3) wahr", @zahlen}
else
{echo "(3) falsch", @zahlen}
if (@zahlen = $text !~ m/$muster/)
{echo "(4) wahr", @zahlen}
else
{echo "(4) falsch", @zahlen}
\n\n
<!--EDIT|esskar|1105369448-->