Schrift
[thread]12435[/thread]

Ref auf ein Array



<< >> 3 Einträge, 1 Seite
RalphFFM
 2008-09-03 12:46
#114220 #114220
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

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

my @array = ();
push @array, {'Mehl'=>100, 'Zucker'=>70, 'Eier'=>3};
push @array, {'Mehl'=>300, 'Zucker'=>80, 'Eier'=>2};
push @array, {'Mehl'=>100, 'Zucker'=>50, 'Eier'=>4};

# Wie kann man die folgenden beiden Zeilen...
my @a = grep { $_->{'Mehl'} == 100 } @array;
print "Situation1:\n", Dumper \@a;  # -> richtiges Ergebnis, Array

print "----------\n";

# ...auch in einer Zeile schreiben, so daß dasselbe Ergebnis herauskommt?
print "Situation2:\n", Dumper \grep { $_->{'Mehl'} == 100 } @array;  # -> falsches Ergebnis, kein Array mehr

Die Ausgabe ist:
Code: (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
Situation1:
$VAR1 = [
{
'Zucker' => 70,
'Eier' => 3,
'Mehl' => 100
},
{
'Zucker' => 50,
'Eier' => 4,
'Mehl' => 100
}
];
----------
Situation2:
$VAR1 = \{
'Zucker' => 70,
'Eier' => 3,
'Mehl' => 100
};
$VAR2 = \{
'Zucker' => 50,
'Eier' => 4,
'Mehl' => 100
};

Wie muß die Syntax sein, damit ich in Situation2 das gleiche Ergebnis bekomme wie in Situation1? Im voraus Danke für Hilfe.
renee
 2008-09-03 12:48
#114221 #114221
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
grep liefert ne Liste zurück, wenn Du eine Arrayreferenz haben willst, dann musst Du es so machen:
Dumper [grep { $_->{'Mehl'} == 100 } @array]
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RalphFFM
 2008-09-03 13:55
#114222 #114222
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke. Ja, eine Arrayreferenz wie in Situation1 war das Ziel.
<< >> 3 Einträge, 1 Seite



View all threads created 2008-09-03 12:46.