use strict; use warnings; sub leftt { wantarray ? print "Left is list\n" : print "Left is scalar\n"; return 1; } sub rightt { wantarray ? print "Right is list\n" : print "Right is scalar\n"; return 1; } sub leftf { wantarray ? print "Left is list\n" : print "Left is scalar\n"; return 0; } sub rightf { wantarray ? print "Right is list\n" : print "Right is scalar\n"; return 0; } print "true or true \n"; my @test = (leftt() or rightt()); print "\@test = @test\n"; print "true or false\n"; @test = (leftt() or rightf()); print "\@test = @test\n"; print "false or true\n"; @test = (leftf() or rightt()); print "\@test = @test\n"; print "false or false\n"; @test = (leftf() or rightf()); print "\@test = @test\n"; __DATA__ Output: true or true Left is scalar @test = 1 true or false Left is scalar @test = 1 false or true Left is scalar Right is list @test = 1 false or false Left is scalar Right is list @test = 0