if ( scalar (grep { $_ eq $item3 } @list) == scalar @list) {
print "All are equal.\n";
}
But that's simply not what he asked for, and even if it were those scalars are redundant, thus making your code bloated without adding to readability, since == imposes scalar context anyway. Thus
if (grep { $_ eq $item3 } @list == @list) {
print "All are equal.\n";
}
Furthermore, you store into the @list array for the sole purpose of that comparison, but that's not necessary either: indeed checking for all the elements of a list to do something is the same thing as checking none of them not to do that particular thing, hence
if (grep $_ neq $item3, $item1, $item2) {
print "All are equal.\n";
}