我想在字符串上下文和数字上下文中返回不同的值,例如 $! 。我知道我可以通过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的任何地方都应该可用。

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top