You are close, but off by a little. The code @$Hash{ArrayInHash} translates into @{$Hash}{ArrayInHash}, which is definitely not what you want; what you need is @{ $Hash{ArrayInHash} }. So you'd update your code as follows:
%Hash = (
ArrayInHash => [1,2,3,4],
);
print "Array in hash: @{$Hash{ArrayInHash}}";
@Array = @{$Hash{ArrayInHash}};
print "\nArray: @Array";
$ArrayRef = $Hash{ArrayInHash};
@Array2 = @$ArrayRef;
print "\nArray from ordinary scalar reference: @Array2";
print "\n\nTrying a foreach loop with the hash";
foreach(@{$Hash{ArrayInHash}})
{
print "\n$_";
}
print "\n\nTrying a foreach loop with the scalar array reference";
foreach(@$ArrayRef)
{
print "\n$_";
}