我正在寻找(如何制作?)一个功能(模块?)
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 之间的非零整数。
可以假设 $scalar 是一个很大的数字,但我并不是特别在寻找超级最优的解决方案。
我正在寻找(如何制作?)一个功能(模块?)
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 之间的非零整数。
可以假设 $scalar 是一个很大的数字,但我并不是特别在寻找超级最优的解决方案。
[1..16]
创建一个数组引用
1..16
创建一个列表。
试试这个来源
use Data::Dumper;
$c = [1..16];
@d = 1..16;
print Dumper $c;
print Dumper \@d;
sub getvalue {
my @array1 = 1..$_[0];
return (@array1);
}
别的
sub getvalue {
return ( 1..$_[0]);
}
参考这个也了解更多关于范围运算符的信息
当你想要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