Perl - массив объектов - PullRequest
       2

Perl - массив объектов

7 голосов
/ 09 августа 2011

Вопрос Noob здесь.

Я уверен, что ответом будет создание объектов и сохранение их в массиве, но я хочу посмотреть, есть ли более простой способ.

ВОбозначение JSON Я могу создать массив объектов примерно так:

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

Красиво и просто.Не спорю, что.

Я знаю, что Perl не является JS, но есть ли более простой способ дублировать массив объектов, а затем создать новый «класс», новые объекты и поместить их в массив?

Полагаю, что это сделало бы возможным, это нотация литерального типа объекта, предоставляемая JS.

Или есть другой способ хранения двух значений, как описано выше?Полагаю, у меня могло бы быть два массива, каждый со скалярными значениями, но это кажется уродливым ... но гораздо проще, чем создать отдельный класс и все такое дерьмо.Если бы я писал Java или что-то в этом роде, тогда нет проблем, но я не хочу беспокоиться обо всем этом, когда пишу небольшой скрипт.

Ответы [ 3 ]

15 голосов
/ 09 августа 2011

Вот начало. Каждый элемент массива @list является ссылкой на хеш с ключами "ширина" и "высота".

#!/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";
}
3 голосов
/ 10 августа 2011

Практически так же, как вы делаете это в JSON, на самом деле, используйте модули JSON и Data :: Dumper для получения вывода из вашего JSON, который вы можете использовать в своемКод 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']);

, который выводит

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

, и все, чего не хватает, это my

3 голосов
/ 09 августа 2011

Массив хэшей сделает это, что-то вроде этого

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'}
   );

затем получите к нему доступ вот так

$file_attachments[0]{'file'}

для получения дополнительной информации перейдите по этой ссылке http://htmlfixit.com/cgi-tutes/tutorial_Perl_Primer_013_Advanced_data_constructs_An_array_of_hashes.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...