in reply to "or" or "||" problems

Your big problem is that the regular expression is broken. Notice the direction of the slashes:

BAD: /\d{4}\-\d{2}/-/d{2}/
GOOD: /\d{4}\-\d{2}-\d{2}/

Here is a more Perlish way to do what you are looking to do:
print "Error!" if grep { !( /\d{4}-\d{2}-\d{2}/ or $_ eq '' ) } @list;

This is saying "Iterate through the array. Give me any elements that do not 1) match the regex and 2) have zero length. In scalar context, you get the number of offending entries. In list context, you get the entries themselves.