in reply to Simple Noob Question

! defined and $_ = ' ' for @$row;

Could also be written as:

not defined( $_ ) and $_ = ' ' for @$row;

Or more simply in modern versions of Perl:

$_ //= ' ' for @$row;

1) ! means "not" as in the not operator (see example above.)

2) You can also use it for filehandles '_' and subroutines '&_'.    It is just another valid character that can be used as variable names (see perlvar.)

3) $row contains a reference to an array and to dereference the array you put a '@' in front of $row.