It is because functions from Digest::* modules doesn't support wide characters.
You need to convert your string to bytes:
use Encode qw( encode_utf8 is_utf8 );
my $source_string = "...";
my $suitable = is_utf8( $source_string ) ? encode_utf8( $source_string ) : $source_string;
..now you can get SHA1/MD5/... from $suitable
BTW, there is an exellent description of Perl's unicode stuff in Russian:
http://habrahabr.ru/post/53578/воскресенье, 2 июня 2013 г., 15:09:57 UTC+4 пользователь Valuyskiy Alex написал: