#!/usr/bin/perl
use strict;
use warnings;
package Customer;
use Moose;
has 'name' => ( is => 'rw' );
has 'attributes' => ( is => 'rw', isa => 'ArrayRef' );
sub to_html_table {
my $self = shift;
my $o = '
' . "\n"
. '| '
. $self->name
. ' |
' . "\n";
$o .= '| '
. $_
. ' |
'
. "\n" for @{$self->attributes};
$o .= '
' . "\n" . "\n";
return $o;
}
package CustomerRecord;
use Moose;
has 'customers' => ( is => 'rw', isa => 'ArrayRef' );
sub add_customer {
my $self = shift;
push @{$self->{'customers'}}, shift @_ if @_;
}
sub to_html {
my $self = shift;
my $o;
$o .= $_->to_html_table for @{$self->{'customers'}};
return $o;
}
sub find {
my $self = shift;
my ($i, $k) = @_;
return $self->new(
customers => [ grep { $_->{$i} eq $k } @{$self->customers} ]
);
}
sub sort_in_order {
my $self = shift;
my ($order, $key) = @_;
die "unknown order for sort" unless $order eq 'asc' or $order eq 'desc';
return $self->new(
customers => $order eq 'asc' ?
[sort { $a->{$key} cmp $b->{$key} } @{$self->customers}] :
[sort { $b->{$key} cmp $a->{$key} } @{$self->customers}]
);
}
package main;
use YAML;
use Data::Dumper;
my $ref = [Load(<<'...')];
---
Kundenname: Meyer
Datensatz:
- DatensatzA 1
- DatensatzA 2
- DatensatzA 3
- DatensatzA 4
- DatensatzA 5
- DatensatzA 6
---
Kundenname: Müller
Datensatz:
- DatensatzB 1
- DatensatzB 2
- DatensatzB 3
---
Kundenname: Schulze
Datensatz:
- DatensatzC 1
- DatensatzC 2
- DatensatzC 3
- DatensatzC 4
- DatensatzC 5
- DatensatzC 6
- DatensatzC 7
...
#print Dumper($ref);
my $record = CustomerRecord->new;
$record->add_customer(
Customer->new(
name => $_->{'Kundenname'},
attributes => $_->{'Datensatz'}
)
) for @$ref;
print $record->to_html; # dump all as html
print $record->find(name => 'Müller')->to_html; # dump result as html
print Dump($record->find(name => 'Müller')); # dump to yaml
print Dumper Load (Dump($record->find(name => 'Müller'))); # load from yaml
print Dumper $record->sort_in_order( desc => 'name' ); # dump descending