2013年3月5日火曜日

戻り値に配列を渡す

Perlでは、戻り値に配列を返す場合、そのまま返却することができます。


#!/opt/local/bin/perl;                                                                                                  

my @array = &getMyArray();
$i = 0;
foreach $ref(@array) {
    print "[$i]:$ref\n";
    $i++;
}

sub getMyArray {
    my @array = ('A', 'B', 'C');
    return @array;
}


結果は
[0]:A
[1]:B
[2]:C
と出力されます。

また、クラスを使う場合でもそのまま配列を返却することが可能です。

main.pl


#!/opt/local/bin/perl;                                                                                                  
package main;

use utf8;
use TestSub;
use Clone qw(clone);

my @foo = ('A','B','C');

my $s = TestSub->new(\@foo);
@foo = ();
my @array = $s->getYourArray();

$i = 0;
foreach $ref(@array) {
    print "[$i]:$ref\n";
    $i++;
}



TestSub.pm


package TestSub;                                                                                                        
use utf8;
use Clone qw(clone);

sub new {
    $self = shift; # クラス名を取得します
    $ref = shift;  # 配列への参照を受け取ります

    my $array = clone($ref); # 配列の参照をコピーします
    my @array2 = (4, 5, 6);  # もう1つ別のメンバ変数を作っています
    my $data = {             # メンバ変数を作っています
        ref => $array,
        ref2=> \@array2,
    };
    return bless $data, $self;
}

sub getYourArray {
    my $self = shift;
    my $result = $self->{ref2}; # メンバ変数から配列を取得
    return @$result; # 配列を返却
}

1;



結果は
[0]:4
[1]:5
[2]:6
と出力されます。



0 件のコメント:

コメントを投稿