http://www.perlmonks.org?node_id=156961


in reply to Re: Re: Passing / evaluating / dieing on one line...
in thread Passing / evaluating / dieing on one line...

Your example is spurious, because it's bad code.
my %Columns = ( 'label' => 0, 'key' => 1, 'cross' => 2, ); foreach my $col_name (keys %Columns) { $Columns[$col_name} = column_exists( \@data, $_[1] || $Columns{$co +l_name} ); die if $Columns{$col_name} == -1; }
Now, adding a new column is a matter of changing the %Columns hash. In addition, it's much easier to factor out the %Columns hash to some configuration file this way than doing it your way.

In addition, this lends itself to even further improvements. For example, consider

my %Columns = ( 'label' => { default => 0, exists => 0, }, 'key' => { default => 1, exists => 0, }, 'cross' => { default => 2, exists => 0, }, ); foreach my $col_name (keys %Columns) { $Columns[$col_name}{exists} = column_exists( \@data, $_[1] || $Columns{$col_name}{default} ) +; die if $Columns{$col_name}{exists} == -1; }

THAT is self-documenting code!

Furthermore, any time I see

do_A; do_B; do_C; do_D; do_A; do_B; do_C; do_E; do_A; do_B; do_C; do_C;
I was to do something like:
for (\&do_D, \&do_E, \&do_C) { do_A; do_B; do_C; $_->(); }
It's cleaner, more maintainable, and more extensible.

------
We are the carpenters and bricklayers of the Information Age.

Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.