-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 に答える
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 に答える