我正在寻找(如何制作?)
的功能(模块?) my $scalar = 16;
return function ($scalar);
给出
@return = ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 );
即,给出1和$标量之间的非零整数。
可以假设$ scalar是一个很大的数字,但我并不是特别寻找一个超级最佳解决方案。
答案 0 :(得分:5)
答案 1 :(得分:3)
[1..16]
创建一个数组引用
1..16
会创建一个列表。
试试此来源
use Data::Dumper;
$c = [1..16];
@d = 1..16;
print Dumper $c;
print Dumper \@d;
答案 2 :(得分:2)
sub getvalue {
my @array1 = 1..$_[0];
return (@array1);
}
其他
sub getvalue {
return ( 1..$_[0]);
}
请参阅此内容,了解有关范围运算符的更多信息
答案 3 :(得分:1)
如果您想要1
和1_000_000_000
之间的所有整数,会发生什么?即使您的计算机有足够的内存,也不希望创建一个很大的数组。
#!/usr/bin/env perl
use strict;
use warnings;
sub make_lazy_increasing_sequence {
my ($current, $end) = map int, @_;
return sub {
return if $current > $end;
return $current++;
}
}
my $from_1_to_5 = make_lazy_increasing_sequence(1, 5);
my @others;
while (defined(my $i = $from_1_to_5->())) {
push @others, make_lazy_increasing_sequence($i, 10_000);
}
for (1 .. 10) { # perl makes sure this range is lazy
print join(',', map $_->(), @others), "\n";
}
print $others[-1]->(), "\n";
输出:
1,2,3,4,5 2,3,4,5,6 3,4,5,6,7 4,5,6,7,8 5,6,7,8,9 6,7,8,9,10 7,8,9,10,11 8,9,10,11,12 9,10,11,12,13 10,11,12,13,14 15