4

文字列コンテキストと数値コンテキストで異なる値を返したいのです$!が。私はwantarrayを使用してリストまたはスカラーコンテキストにあるかどうかを確認できますが、純粋なPerlで、どのスカラーコンテキストにあるかを判断する方法はありますか?XSにも答えがあると思いますが、純粋なPerlでそれを行う方法がない場合は、その答えを喜んで受け入れます。

4

2 に答える 2

13

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があればどこでも利用できるはずです。

于 2009-04-29T00:49:17.173 に答える
3

これが役立つ場合(おそらくローマ数字)を提案することはできますが、整数と文字列属性を持つオブジェクトを作成する方がよいでしょう。適切なコンテキストで適切な属性を使用します。

これにより、「useoverload」を使用して操作をオーバーロードできるという柔軟性が追加されます。ローマ数字の例では、2つのローマ数字を一緒に追加するまでdualvarが機能します。

于 2009-05-02T00:39:39.243 に答える