X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Debbugs%2FCommon.pm;h=4755fd5d2412f7fbf8f916be1765e417bad3abf8;hb=3cccbb53e0dfd0b7f970250da329615e15a54a99;hp=b59e6fa88b5985287e319af836de7aafb31113db;hpb=106724733322c2bedb9d63aadd733bc7a8fee801;p=debbugs.git diff --git a/Debbugs/Common.pm b/Debbugs/Common.pm index b59e6fa..4755fd5 100644 --- a/Debbugs/Common.pm +++ b/Debbugs/Common.pm @@ -50,7 +50,7 @@ BEGIN{ qw(cleanup_eval_fail), qw(hash_slice), ], - utf8 => [qw(encode_utf8_structure)], + utf8 => [qw(encode_utf8_structure encode_utf8_safely)], date => [qw(secs_to_english)], quit => [qw(quit)], lock => [qw(filelock unfilelock lockpid)], @@ -432,6 +432,7 @@ sub __add_to_hash { $type //= 'address'; my $fh = IO::File->new($fn,'r') or die "Unable to open $fn for reading: $!"; + binmode($fh,':encoding(UTF-8)'); while (<$fh>) { chomp; next unless m/^(\S+)\s+(\S.*\S)\s*$/; @@ -928,26 +929,40 @@ sub encode_utf8_structure { push @ret,$_; } else { - push @ret,__encode_utf8($_); + push @ret,encode_utf8_safely($_); } } --$depth; return @ret; } -sub __encode_utf8 { +=head2 encode_utf8_safely + + $octets = encode_utf8_safely($string); + +Given a $string, returns the octet equivalent of $string if $string is +in perl's internal encoding; otherwise returns $string. + +Silently returns REFs without encoding them. [If you want to deeply +encode REFs, see encode_utf8_structure.] + +=cut + + +sub encode_utf8_safely{ my @ret; for my $r (@_) { - if (not ref($r) and is_utf8($r)) { + if (not ref($r) and is_utf8($r)) { $r = encode_utf8($r); } push @ret,$r; } - return @ret; + return wantarray ? @ret : (length @_ > 1 ? @ret : $_[0]); } + 1; __END__