sub foos { qw/foo foo/ }
sub bars { qw/bar bar bar/ }
断言“foos()返回的项目数少于bars()返回的项目数”的简洁方法是什么? foos() < bars()
不起作用,scalar(foos()) < scalar(bars())
也不起作用。
答案 0 :(得分:3)
“简洁”取决于你,我猜,但最简单的方法是将结果分配给数组并比较数组
my @a = foos();
my @b = bars();
print @a < @b; # prints 1 with the above subs
您还可以使用= () =
方法转换计数:
my $foo = () = foos(); # 2
my $bar = () = bars(); # 3
答案 1 :(得分:0)
以下工作原理如下,但与OP的功能定义无关。也许它与qw //行为如何改变了几个版本有关。或者,可能存在将函数优化为常量的问题。
sub foos {(1,2,3)}
sub bars {(1,2,3,4)}
if (foos() < bars())
{ print 'foos returns fewer elements than bars'}
else
{ print 'foos returns same or more elements than bars'}
以下是OP的功能(或者它们是常数?)定义。
sub foos { qw/foo foo/ }
sub bars { qw/bar bar bar/ }
if ( (@g=foos) < (@h=bars) )
{ print 'foos returns fewer elements than bars'}
else
{ print 'foos returns same or more elements than bars'}