I can't reproduce it on DreamHost (twins.dreamhost.com) with the info you provided.
$ cat a.pl
use strict;
use warnings;
use feature qw( say );
use Text::CSV qw( );
use Encode qw( encode_utf8 );
say Text::CSV->VERSION;
say Text::CSV->is_xs() ? 'xs' : 'pp';
say Text::CSV->version;
my $csv = Text::CSV->new ({
allow_whitespace => 1,
binary => 1,
sep_char => '|',
}) or die;
my $csv_file = encode_utf8(<<'__EOI__');
foo|bar|baz
dog|cat|cow
__EOI__
open(my $csv_fh, "<:encoding(utf8)", \$csv_file) or die;
say for $csv->column_names($csv->getline($csv_fh));
$ perl a.pl
1.06
xs
0.52
foo
bar
baz
And with a locally installed Perl 5.12.1 on the same machine:
$ perl a.pl
1.20
xs
0.74
foo
bar
baz
|