PerlならサンプルコードPerl入門

2008-06-10

wantarray関数 - スカラかリストをコンテキストに応じて返却

  1. Perl
  2. 関数
  3. wantarray

 Perlではコンテキストという概念があるので、スカラあるいはリストをコンテキストに応じて返却することができます。

sub func_name{
  # 処理 ...
  return wantarray ? リスト : スカラ;
}

 wantarrayを使えば、リストコンテキストの場合とスカラコンテキストの場合を区別して、戻り値を返却することができます。scalar 関数は、スカラコンテキストを強制するので、scalar @odd_nums で、配列の個数が返ります。

サンプル

  wantarrayのサンプルです。

use strict;
use warnings;

# スカラかリストをコンテキストに応じて返却する
# wantarray ? return リスト : return スカラ

print "1: スカラかリストをコンテキストに応じて返却する\n";
my @nums = (1, 2, 3, 4, 5);
my @odd_nums = grep_odd_nums(@nums);
my $odd_nums_cnt = grep_odd_nums(@nums); 

print "1〜5 の中で、奇数は、", join(',', @odd_nums) . "です。\n";
print "奇数の個数は、$odd_nums_cnt です。\n\n";

# 奇数のリストを返却するサブルーチン
sub grep_odd_nums {
  my @nums = @_;
  my @odd_nums;
  
  for my $num (@nums) {
    if($num % 2 == 1) {
      push @odd_nums, $num;
    }
  }

  # リストコンテキストならば、 @odd_nums を返却
  # スカラコンテキストならば、 @odd_nums の個数を返却
  return wantarray ? @odd_nums : scalar @odd_nums;
}

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証