Perl UTF-8 tips

General

use utf8;
use open qw(:utf8 :std);
		

Command-line arguments

use Encode;
my $arg1 = decode('utf8', $ARGV[1]);
		

Berkeley db version 1.x

use DB_File;
use DBM_Filter;

my $db = tie %hash, 'DB_File', $file;
$db->Filter_Push('utf8');
		

MySQL with DBI

my $dbh = DBI->connect("DBI:mysql:database", "username", "password");
$dbh->{mysql_enable_utf8} = 1;
$dbh->do('set names "UTF8"');
		

CGI

use Encode;
use CGI;
my $cgi = new CGI;

# decode() is needed for some earlier versions of CGI
my $input = decode('utf8', $cgi->param("input"));
		

Invalid UTF-8 characters detection

use Encode;
if (eval { decode_utf8($string, Encode::FB_CROAK); 1 }) {
	# $string is valid utf8
} else {
	# $string is not valid utf8
}