]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Common.pm
add encode_utf8_safely function
[debbugs.git] / Debbugs / Common.pm
index b59e6fa88b5985287e319af836de7aafb31113db..4755fd5d2412f7fbf8f916be1765e417bad3abf8 100644 (file)
@@ -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__