Besides numbers and strings scalar values can also hold the value
undef, uninitialzied scalar variables have this value. It is interpreted as 0 in numeric context and as the empty string "" in string context. In other instances, like in subroutines, a return value of
undef would indicate failure. In the third example you presented
my @a = ()[0];
jwkrahn mentioned a concept that fits the case since you are slicing an empty list but in the previous examples you are assigning conceptually nothing and hence
undef is returned as the value of $VAR1.
Excellence is an Endeavor of Persistence.
Chance Favors a Prepared Mind