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/`).*