in reply to @_ still mystifies me

I think you should have to use the ternery operator here:
my @lexlist = @_ ? @_ : sort keys %lexicon;
Update - contrary to glancing, || as well as or will not work in this example. By using || or or with parentheses, sort keys %lexicon is evaluated in scalar context. Here is some code to demonstrate:
use strict; use Data::Dumper; my %lexicon = ( foo => 'bar', baz => 'qux', ); foo(); foo(qw(one two three)); bar(); bar(qw(one two three)); baz(); baz(qw(one two three)); sub foo { my @lexlist = @_ ? @_ : sort keys %lexicon; # correct print "foo:\n", Dumper \@lexlist; } sub bar { my @lexlist = @_ || sort keys %lexicon; # incorrect print "bar:\n", Dumper \@lexlist; } sub baz { my @lexlist = (@_ or sort keys %lexicon); # incorrect print "baz:\n", Dumper \@lexlist; }

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)