Thread Perl und die Kontexte (42 answers)
Opened by Muffi at 2014-10-07 10:42

rosti
 2014-10-07 21:24
#177709 #177709
User since
2011-03-19
3196 Artikel
BenutzerIn
[Homepage]
user image
2014-10-07T14:51:22 Muffi
Könnte $cgi->param ein Array zurückliefern statt einer Liste wärs nicht passiert.
Könnte man einen Hash anders belegen als über den Listenweg (mit dem => fake komma) wärs auch nicht passiert.


Ich sehe das andersherum, weil: Sowohl key als auch value in einem Hash sind Skalare. Von daher müsste die Wertzuweisung an einen Hash-key spontan einen skalaren Kontext erzeugen, was leider nicht der Fall ist.

PS: Das Verhalten lässt sich mit ein paar Zeilen Code prüfen:
Code (perl): (dl )
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
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

# erwarte skalaren Kontext bei der Wertzuweisung
my %h = (
    x => ctx(),
);

# erzeugt auf jeden Fall den skalaren Kontext
my $y = ctx();
print Dumper \%h, $y;

# liefert je nach Kontext eine Liste oder ein Skalar
sub ctx{
    return wantarray ? (1,2,3) : [1,2,3];
}

### Ausgabe

$VAR1 = {
          'x' => 1,
          '2' => 3
        };
$VAR2 = [
          1,
          2,
          3
        ];


Das Verhalten hat mit CGI absolut nichts zu tun, kann jedoch zu unsicheren Konstrukten führen, welche im verlinkten Artikel erklärt sind.
Last edited: 2014-10-08 12:33:38 +0200 (CEST)

View full thread Perl und die Kontexte