use DateTime::Format::Strptime qw();
my $time_str = 'Mon, 11 Jul 2011 11:45:07 +08:00';
# your notation of time zone
# does not comply with relevant standards
$time_str =~ s/([+-]\d\d):(\d\d) \z/$1$2/msx; # kill colon
my $parser = DateTime::Format::Strptime->new(
pattern => '%a, %d %b %Y %T %z',
locale => 'en', # 'Mon', 'Jul' are English
on_error => 'croak',
);
my $datetime = $parser->parse_datetime($time_str);
# Now you have a DateTime object. To compare,
# use the overloaded relation operators.
# <=> operator/sort function works as well.
if ($datetime < $a_different_datetime) {
say 'earlier';
}