異なるスカラーコンテキストで異なる値を返すオブジェクトを作成するにはどうすればよいですか?
質問
$!
はそうです。 wantarrayを使用してリストまたはスカラーコンテキストのどちらにいるかを知ることができますが、純粋なPerlで自分がどのスカラーコンテキストにいるかを判断する方法はありますか? XSにも答えがあると思いますが、純粋なPerlでそれを行う方法がなければ、その答えを喜んで受け取ります。
解決
Scalar :: Util
モジュール、具体的には dualvar()
関数をチェックしてください:
use Scalar::Util qw(dualvar);
my $scalar = dualvar 10, "Hello";
my $twelve = $scalar + 2; # $twelve = 12
my $greeting = $scalar . " world"; # $greeting = "Hello world"
Scalar :: Util
はコアディストリビューションの一部であり、Perlがあればどこでも利用できるはずです。
他のヒント
これが役立つ場合(ローマ数字かもしれません)を提案できますが、整数と文字列属性を持つオブジェクトを作成する方が良いでしょう。適切なコンテキストで適切な属性を使用します。
これにより、「use overload」を使用して操作をオーバーロードできる柔軟性が追加されます。ローマ数字の例では、2つのローマ数字を加算するまでdualvarが機能します。
所属していません StackOverflow