Thread Ganz simple Frage zum Operator !~ (8 answers)
Opened by Array at 2008-03-06 22:15

KurtZ
 2008-03-06 23:11
#106691 #106691
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
KurtZ+2008-03-06 21:55:49--
jup dachte ich mir !~ liefert dir ein leeres Array, das existiert und ist wahr, liefert beim Ausdruck nur Luft. Schau mal bei perlop was genau !~ liefern sollte (grübel ... )


Also für mich siehts so aus als hätte !~ überhaupt keinen Listenkontext sondern nur den Wahrheitswert im scalaren Kontext. EDIT ein schönes Beispiel für eine fehlende Orthogonalität in Perl, die aber keiner vermisst

Dat ist bei Perl bei FALSE ein Leerstring der dann in dein array gepackt wird. Bei TRUE ist es hingegen 1 (die du auch in ein Array wickelst).

Mein Tip, wenn du wirklich ein Array aller Teilmatches haben willst dann nutze =~ und negiere die gesamte Aussage mit "unless" oder "if not"

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl -w
use Data::Dumper;
$\="\n";

$muster ='(\d+)(\.)(\d+)';
for $text ( qw( 4.12 4 ) ) {
        
        print "\n\n\$text: $text\n";


        if (@zahlen = ( $text =~ m/$muster/ ) )
                {print ++$count,". wahr: @zahlen\n",Dumper \@zahlen;}
        else
                {print ++$count,". falsch: @zahlen\n",Dumper \@zahlen;}
        
        if (not @zahlen =  ($text =~ m/$muster/)  )
                {print ++$count,". wahr: @zahlen\n",Dumper \@zahlen;}
        else
                {print ++$count,". falsch: @zahlen\n",Dumper \@zahlen;}
        
}


[nop]$text: 4.12

1. wahr: 4 . 12
$VAR1 = [
'4',
'.',
'12'
];

2. falsch: 4 . 12
$VAR1 = [
'4',
'.',
'12'
];



$text: 4

3. falsch:
$VAR1 = [];

4. wahr:
$VAR1 = [];
[/nop]

Alles klar???
TMTOWTDYOG (there's more than one way to dig your own grave)

View full thread Ganz simple Frage zum Operator !~