2011-08-09 20 views
6

Noob pregunta aquí.Perl - Matriz de objetos

Estoy seguro de que la respuesta será crear objetos, y almacenarlos en una matriz, pero quiero ver si hay una manera más fácil.

En la notación JSON que puede crear una matriz de objetos de este modo:

[ 
    { width : 100, height : 50 }, 
    { width : 90, height : 30 }, 
    { width : 30, height : 10 } 
] 

bonito y sencillo. No discutiendo eso.

Sé que Perl no es JS, pero ¿hay una manera más fácil de duplicar una matriz de objetos, luego crear una nueva "clase", nuevos objetos y empujarlos en una matriz?

Supongo que lo que haría esto posible es una notación de tipo literal de objeto que proporciona JS.

¿O existe otra forma de almacenar dos valores, como en el ejemplo anterior? Supongo que podría tener dos arreglos, cada uno con valores escalares, pero eso parece feo ... pero mucho más fácil que crear una clase por separado, y toda esa porquería. Si estuviera escribiendo Java o algo así, entonces no hay problema, pero no quiero molestarme con todo eso cuando estoy escribiendo un pequeño guión.

+2

En JS , los objetos son básicamente lo mismo que hashes/arrays asociativos. En Perl, son ideas distintas. Si solo necesitas algo para poner datos, no necesitas un objeto. Los objetos son cosas con * comportamiento *. – hobbs

Respuesta

15

Aquí hay un comienzo. Cada elemento de la matriz @list es una referencia a un hash con claves "ancho" y "altura".

#!/usr/bin/perl 

use strict; 
use warnings; 

my @list = (
    { width => 100, height => 50 }, 
    { width => 90, height => 30 }, 
    { width => 30, height => 10 } 
); 

foreach my $elem (@list) { 
    print "width=$elem->{width}, height=$elem->{height}\n"; 
} 
+0

Y luego puede agregar más elementos a la matriz: 'push @list, {width => 40, height => 70};'. –

+1

+1 para 'use strict;' AND 'use advertencias;'. Gracias. – L0j1k

3

una serie de valores hash lo haría, algo como esto

my @file_attachments = (
    {file => 'test1.zip', price => '10.00', desc => 'the 1st test'}, 
    {file => 'test2.zip', price => '12.00', desc => 'the 2nd test'}, 
    {file => 'test3.zip', price => '13.00', desc => 'the 3rd test'}, 
    {file => 'test4.zip', price => '14.00', desc => 'the 4th test'} 
    ); 

luego acceder a ella como esto

$file_attachments[0]{'file'} 

para más información echa un vistazo a este enlace http://htmlfixit.com/cgi-tutes/tutorial_Perl_Primer_013_Advanced_data_constructs_An_array_of_hashes.php

+1

Una referencia mejor sería http://perldoc.perl.org/perldsc.html – MkV

3

Bastante de la misma manera que lo haces en JSON, de hecho, usa el JSON y Data::Dumper módulos produzcan salida de su JSON que se puede utilizar en el código Perl:

use strict; 
use warnings; 
use JSON; 
use Data::Dumper; 
# correct key to "key" 
my $json = <<'EOJSON'; 
[ 
    { "width" : 100, "height" : 50 }, 
    { "width" : 90, "height" : 30 }, 
    { "width" : 30, "height" : 10 } 
] 
EOJSON 

my $data = decode_json($json); 
print Data::Dumper->Dump([$data], ['*data']); 

que da salida a

@data = (
      { 
      'width' => 100, 
      'height' => 50 
      }, 
      { 
      'width' => 90, 
      'height' => 30 
      }, 
      { 
      'width' => 30, 
      'height' => 10 
      } 
     ); 

y todo lo que falta es la mi

Cuestiones relacionadas