use URI::Escape qw(uri_unescape); use MIME::Base64; use Digest::HMAC_SHA1; $str=Digest::HMAC_SHA1::hmac_sha1("GET&%2F&AccessKeyId%3DZ7xxxxxxx4xxVh%26Action%3DDescribeRegions%26Format%3DXML%26RegionId%3Dregion1%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3DNwDAxvLU6tFE0DVb%26SignatureVersion%3D1.0%26TimeStamp%3D$SDATE%26Version%3D2014-05-26",'fQIJzvxOXZuc1AhLxtVMz0qxxxxxkj&'); $Signature = encode_base64($str,""); print "$Signature ";