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

roho has asked for the wisdom of the Perl Monks concerning the following question:

In the following code, pack is mangling utf output (the dash "hex 2013") compared to simply printing it.

#!/usr/bin/perl use strict; use warnings; use utf8; use open ':encoding(utf8)'; my $ofile = 'utf_issue.txt'; open(my $fh,'>', $ofile) or die "Error opening $ofile: $!\n"; binmode($fh, ":utf8"); my $x = 'FREIGHT INTRASTATE'; print $fh $x, "\n"; print $fh pack('A20',$x), "\n";

Is there a work-around for this? This is messing up my output big time!
Thanks.

UPDATE

Here is my work-around, since I am only using pack to pad with blanks:

################################################################### # This subroutine pads 'txt' on the right to length 'len'. ################################################################### sub mypack { my $len = shift; my $txt = shift; $len =~ s/^A//i; # Remove 'A' that system "pack" function uses. return sprintf("%s%s",$txt, ' 'x(($len-length($txt)))); }

"Its not how hard you work, its how much you get done."