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

虽然我可以提出有用的情况(可能是罗马数字),但最好创建一个具有整数和字符串属性的对象。在适当的上下文中使用适当的属性。

这为您提供了额外的灵活性,可以使用“使用重载”来重载操作。在罗马数字示例中,dualvar 将一直有效,直到您想将 2 个罗马数字相加。

于 2009-05-02T00:39:39.243 回答