In Perl, scalar context vs. list context can be tricky. It's got some good points that make certain operations convenient, but occasionally you run into something terrible, like completely changing the meaning of an operator (potentially from a significant distance away in the code).
sub foo { (1..5) }
my @list = foo(); # (1,2,3,4,5)
my $length = scalar @list; # 5. the length of the list.
my $length2 = scalar foo(); # '' (the empty string. because it's false)
That's just not right.
(It arises from trying to make something that acts sort of like the regular range operator, so you can say something in a loop like next if /start_regex/ .. /end_regex/
).