いいえ。ただし、3つの状態を返す方法は多数あります。
解決策1
- 空のリスト(
return;
)
- 未定義(
return undef;
)
- 文字列(
return "foo";
)
my $found = my ($result) = search_struct($key, $data);
if ($found) {
print "$key: ", $result // "Undefined!", "\n";
}
else {
print "Sorry, no result was found for $key.\n";
}
スカラーコンテキストでのリストの割り当ては、右側から返される要素の数に基づいて評価されます。
解決策2
- False(
return undef;
)
- 未定義への参照(
return \undef;
)
- 文字列への参照(
return \"foo";
)
my $result = search_struct($key, $data);
if ($result) {
print "$key: ", $$result // "Undefined!", "\n"; # Note change here!
}
else {
print "Sorry, no result was found for $key.\n";
}
解決策3
- False(
return 0;
)
- True、およびundef(
return (1, undef);
)
- True、および文字列(
return (1, "foo");
)
my ($found, $result) = search_struct($key, $data);
if ($found) {
print "$key: ", $result // "Undefined!", "\n";
}
else {
print "Sorry, no result was found for $key.\n";
}
解決策4
- False(
return 0;
)
- True、undefがパラメータとして返されます(
$_[2] = undef; return 1;
)
- True、文字列がパラメータとして返されます(
$_[2] = "foo"; return 1;
)
my $found = search_struct($key, $data, my $result);
if ($found) {
print "$key: ", $result // "Undefined!", "\n";
}
else {
print "Sorry, no result was found for $key.\n";
}
ところで、最初のパラメーターとしてデータ構造を渡し、2番目のパラメーターとしてキーを渡します。オブジェクト指向プログラミングのようなものです。