ルモーリン
ホーム 更新 Perl ランドナー サービス 雑談 コースガイド 鉄ゲタ 自転車 Linux リンク 連絡先

リストを返す関数をスカラコンテキストで評価

2019-02-26

きっかけ

いきなり陳謝。 この自分のツイートは大間違い。 ああもう恥ずかしい(*^艸^)
ということはあれだ、自分のコードではリストを返したつもりで配列返してたのかorz

コードを書いてみた

#!/usr/bin/env perl -w

use utf8;
use strict;
use warnings;

use Encode::Locale;
use Encode::Argv;

use feature "say";

binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";

$| = 1;

say  "配列を返す場合";
my @l = return_array();
say "リストコンテキスト:@l";
my $s = return_array();
say "スカラコンテキスト:$s";

say  "リストを返す場合";
@l = return_list();
say "リストコンテキスト:@l";
$s = return_list();
say "スカラコンテキスト:$s";

exit;

sub return_array {
	my @result = ("たこルカ", "は", "俺の嫁");
	return @result;
}

sub return_list {
	return ("たこルカ", "は", "俺の嫁");
}

実行結果

配列を返す場合
リストコンテキスト:たこルカ は 俺の嫁
スカラコンテキスト:3
リストを返す場合
リストコンテキスト:たこルカ は 俺の嫁
スカラコンテキスト:俺の嫁

種明かし

配列とリストの違いです。
「配列をスカラコンテキストで評価すると、配列の大きさが返されます。 (これはリストに対しては成り立たないことに注意してください; この場合には、C のカンマ演算子と同じように最後の値が返され、 組み込み関数のように値を返すことはしません。)」
perldata - Perl のデータ型 - perldoc.jp