((defined($_->[0]) && $_->[0] =~ m/^\d+$/) ? $_->[0] : 0)
Am I correct if I assume that here $_ is defined as 'one single digit or maybe a few digits (d+, no spaces and stuff like that in between the digits) and then if this is not the case it should be a 0 (zero)?
Almost. It means that $_->[0] is
- defined, and
- one or more digits 0-9
I would have made it a function to make it more readable:
$ perl
use strict;
use warnings;
use Data::Table;
my $t = new Data::Table([ [ 1, 2, 3 ], [ 10, 20, " " ] ], [ 'A', 'B' ]
+, 1);
# create emtpy column
my @newCol = ();
$newCol[ $t->nofRow - 1 ] = undef;
$t->addCol(\@newCol, 'adding_up');
# Return input if input is an integer, otherwise zero
sub to_int_or_zero {
my $value = shift;
if (defined($value) &&
$value =~ m/^\d+$/) {
return $value;
} else {
return 0;
}
}
# Put the formula in the empty column
$t->colsMap(
sub {
$_->[2] =
to_int_or_zero($_->[0]) +
to_int_or_zero($_->[1]);
}
);
print $t->csv;
__END__
A,B,adding_up
1,10,11
2,20,22
3, ,3
|