-2

我正在寻找(如何制作?)一个功能(模块?)

 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 是一个很大的数字,但我并不是特别在寻找超级最优的解决方案。

4

4 回答 4

5

范围运算符 ..返回一个与您想要的完全匹配的列表。

要创建一个从 1 到 的列表$x,语法就是1 .. $x

要将其分配给数组变量,@array = 1 .. $x;

于 2013-08-28T06:51:46.507 回答
3

[1..16] 创建一个数组引用

1..16创建一个列表。

试试这个来源

use Data::Dumper;
$c = [1..16];
@d = 1..16;
print Dumper $c;
print Dumper \@d;
于 2013-08-28T06:51:33.353 回答
2
sub getvalue {
        my @array1 = 1..$_[0];

        return (@array1);
    }

别的

sub getvalue {
            return ( 1..$_[0]); 
        }

参考这个也了解更多关于范围运算符的信息

http://www.perlmonks.org/?node_id=377450

于 2013-08-28T06:48:47.280 回答
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
于 2013-08-28T12:40:45.577 回答