perl:在1和$ input之间给出非零整数的函数

时间:2013-08-28 06:44:12

标签: perl

我正在寻找(如何制作?)

的功能(模块?)
 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是一个很大的数字,但我并不是特别寻找一个超级最佳解决方案。

4 个答案:

答案 0 :(得分:5)

Range Operator ..会返回一个与您想要的完全匹配的列表。

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

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

答案 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]); 
        }

请参阅此内容,了解有关范围运算符的更多信息

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

答案 3 :(得分:1)

如果您想要11_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