use strict; use warnings; use utf8 ; use Encode; use Data::Dump qw/dd pp/; use Devel::Peek; use MIME::Base64 ; use open IO => ':encoding(UTF-8)', ':std'; roundtrip($_) for 'Ä', 'ř'; sub roundtrip { my $orig = shift; warn "\n\n****** START\n"; peek( orig => $orig); my $encode_utf8 = Encode::encode_utf8($orig); peek (encode_utf8 =>$encode_utf8); my $encode_b64 = MIME::Base64::encode_base64($encode_utf8); peek(encode_b64=>$encode_b64); my $decode_b64 = MIME::Base64::decode_base64($encode_b64); peek (decode_b64=>$decode_b64); my $decode_utf8 = Encode::decode_utf8($decode_b64); peek (decode_utf8 => $decode_utf8); } sub peek { my ($name,$str) = @_; my (undef, $file, $line) = caller(0); my $pp = pp($str); warn "\n*** $name = '$str' = $pp at $file line $line\n"; Dump $_[1]; }