简单简洁的方法来比较两个函数返回的结果列表的长度

时间:2013-11-21 00:27:33

标签: perl

sub foos { qw/foo foo/ }
sub bars { qw/bar bar bar/ }

断言“foos()返回的项目数少于bars()返回的项目数”的简洁方法是什么? foos() < bars()不起作用,scalar(foos()) < scalar(bars())也不起作用。

2 个答案:

答案 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'}