in reply to Perl's hidden depths
You have the following:
$history{ $+{ ticket } }{ $entry->{ action } } = {
date => $words[0],
'time' => $words[1],
( exists ( $+{ order } ) ? ( order => $+{ order } ) : () ),
( exists ( $+{ invoice } ) ? ( invoice => $+{ invoice } ) : () ),
( exists ( $+{ shipment } ) ? ( shipment => $+{ shipment } ) : () ),
( exists ( $+{ scheduled_date } ) ? (
scheduled_date => $+{ scheduled_date } ) : () ),
( exists ( $+{ status } ) ? ( status => $+{ status } ) : () ),
};
That's a lot less readable than then following:
$history{ $+{ ticket } }{ $entry->{ action } } = {
date => $words[0],
time => $words[1],
( exists( $+{ order } ) ? order => $+{ order } : () ),
( exists( $+{ invoice } ) ? invoice => $+{ invoice } : () ),
( exists( $+{ shipment } ) ? shipment => $+{ shipment } : () ),
( exists( $+{ scheduled_date } ) ? scheduled_date => $+{ scheduled_date } : () ),
( exists( $+{ status } ) ? status => $+{ status } : () ),
};
It can be further cleaned using a loop.
$history{ $+{ ticket } }{ $entry->{ action } } = { date => $words[0], time => $words[1], (\%+)->%{ grep exists( $+{ $_ } ), qw( order invoice shipment scheduled_date status ) } };
The mess can be hidden in a sub.
sub kv { my $h = shift; $h->%{ grep exists( $h->{ $_ } ), @_ } } kv( \%+, qw( ... ) )
We can simplify further if we don't need 100% equivalence.
If you don't care about undef fields, it simplifies to the following:
$history{ $+{ ticket } }{ $entry->{ action } } = { date => $words[0], time => $words[1], (\%+)->%{qw( order invoice shipment scheduled_date status )} };
If there are no extra captures (or you don't care if they end up as extra fields), it simplifies to the following:
$history{ $+{ ticket } }{ $entry->{ action } } = { date => $words[0], time => $words[1], %+, };
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Perl's hidden depths
by talexb (Chancellor) on Nov 28, 2024 at 19:00 UTC |