--- charsetwars.pl.orig	2004-03-01 15:07:14.000000000 +0100
+++ scripts/charsetwars.pl	2004-12-21 00:10:24.000000000 +0100
@@ -2,8 +2,6 @@
 #
 # Look also at <http://norpan.org/charconv.c> (listed on <http://www.irssi.org/?page=plugins>).
 #
-# Requires Text::Iconv (libtext-iconv-perl on Debian).
-#
 # Usage:
 #   /charsetwars_help
 
@@ -34,11 +32,12 @@
 
 use Irssi;
 
-use Text::Iconv;
+require v5.8;
+use Encode;
 use Data::Dumper;
 
 
-$VERSION = '0.69.1';
+$VERSION = '0.69.1bas';
 %IRSSI = (
     authors	=> 'Gustavo De Nardin ("spuk"), with ideas from recode.pl (...), irssiq.pl (Data::Dumper), charconv.c (ircnet/channel/nick associations), others ...',
     contact	=> 'spuk@ig.com.br',
@@ -91,18 +90,13 @@
 # own_charset => in_charset = "RE"
 # ("out-of-the-box" detected charsets)
 $guesses{'iso8859-1'}{'utf-8'} = "á|é|í|ó|ú|ã|ç|à|ô|ê";
-$guesses{'utf-8'}{'iso8859-1'} = Text::Iconv->new('utf-8', 'iso8859-1')->convert($guesses{'iso8859-1'}{'utf-8'});
+$guesses{'utf-8'}{'iso8859-1'} = encode('iso8859-1', decode('utf-8', $guesses{'iso8859-1'}{'utf-8'}));
 
 
 # hash of hashes: $enemies{$ircnet}{$nickchan} = $charset
 our %enemies;
 
 
-# "cache" converters
-our %iconv_cache_in = ();
-our %iconv_cache_out = ();
-
-
 # Keep track of change
 our $own_charset = Irssi::settings_get_str('charsetwars_own');
 
@@ -177,7 +171,7 @@
     }
 
     $guesses{$charset}{$own_charset} = $chars;
-    $guesses{$own_charset}{$charset} = Text::Iconv->new($own_charset, $charset)->convert($chars);
+    $guesses{$own_charset}{$charset} = encode($charset, decode($own_charset, $chars));
     Irssi::printformat(MSGLEVEL_CLIENTCRAP, 'charsetwars_guesses_add', $own_charset, $charset, $chars);
 }
 Irssi::command_bind('charsetwars_guess_add', 'cmd_guess_add', 'charsetwars.pl');
@@ -320,14 +314,6 @@
 
 
 
-# Invalidate iconv_cache_{in,out}
-sub invalidate_iconv_caches {
-    %iconv_cache_in = ();
-    %iconv_cache_out = ();
-    $own_charset = Irssi::settings_get_str('charsetwars_own');
-}
-
-
 sub guess_charset {
     my ($txt) = @_;
 
@@ -386,31 +372,19 @@
 
 sub convert_txt {
     my ($in_out, $charset, $txt, $nick, $channel, $ircnet) = @_;
-    my %cache;
 
     if (!$txt) { return $txt; }
-
-    if ($in_out == 'in') {
-        %cache = %iconv_cache_in;
-    }
-    elsif ($in_out == 'out') {
-        %cache = %iconv_cache_out;
-    }
-
-    my $iconv = $cache{$charset};
-    if (!$iconv) {
-        if ($in_out =~ 'in') {
-            $iconv = Text::Iconv->new($charset, $own_charset);
-        }
-        elsif ($in_out =~ 'out') {
-            $iconv = Text::Iconv->new($own_charset, $charset);
-        }
-        $iconv->raise_error(0);
-        $cache{$charset} = $iconv;
+    my $txt_ret;
+    if ($in_out =~ 'in') {
+        $txt_ret = encode($own_charset, decode($charset, $txt));
+    }
+    elsif ($in_out =~ 'out') {
+        $txt_ret = encode($charset, decode($own_charset, $txt));
+    } 
+    else {
+        return $txt;
     }
 
-    my $txt_ret = $iconv->convert($txt);
-
     if (!$txt_ret
         or (Irssi::settings_get_bool('charsetwars_wrong_guess') && guess_wrong_charset($charset, $txt))) {
         Irssi::print("[charsetwars.pl:convert_txt()] Conversion error ($in_out, $charset, $txt, $nick, $channel, $ircnet)");
@@ -447,8 +421,8 @@
         return $txt;
     }
 
-    # user changed 'charsetwars_own', invalidate caches
-    if ($own_charset !~ Irssi::settings_get_str('charsetwars_own')) { invalidate_iconv_caches(); }
+    # user changed 'charsetwars_own'
+    $own_charset = Irssi::settings_get_str('charsetwars_own'); 
 
     return convert_txt('in', $in_charset, $txt, $nick, $channel, $ircnet);
 }
@@ -464,8 +438,8 @@
         return $txt;
     }
 
-    # user changed 'charsetwars_own', invalidate caches
-    if ($own_charset != Irssi::settings_get_str('charsetwars_own')) { invalidate_iconv_caches(); }
+    # user changed 'charsetwars_own'
+    $own_charset = Irssi::settings_get_str('charsetwars_own');
 
     return convert_txt('out', $out_charset, $txt, $nick, $channel, $ircnet);
 }


syntax highlighted by Code2HTML, v. 0.9.1