如何创建一个在不同标量上下文中返回不同值的对象?

发布于 2024-07-18 03:04:48 字数 252 浏览 4 评论 0原文

我想在字符串上下文和数字上下文中返回不同的值,例如 $! 确实如此。 我知道我可以通过 WantArray 找出我是处于列表上下文还是标量上下文中,但是纯 Perl 中有没有办法确定我处于哪个标量上下文中? 我认为 XS 中也有答案,如果无法在纯 Perl 中做到这一点,我愿意接受该答案。

I want to return a different value in string context and numeric context like $! does. I know I can find out whether I am in list or scalar context with wantarray, but is there any way in pure Perl to determine which scalar context I am in? I assume there is an answer in XS as well and I am willing to take that answer if there is no way do it in pure Perl.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴意少年 2024-07-25 03:04:48

查看 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 的地方都可以使用。

Check out the Scalar::Util module, specifically the dualvar() function:

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 is part of the core distribution, and should be avaliable anywhere you have Perl.

地狱即天堂 2024-07-25 03:04:48

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

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

While I can propose cases when this would be useful (maybe Roman Numerals), you would be better off creating an object with an integer and a string attribute. Use the appropriate attribute in the appropriate context.

This gives you the added flexibility of being able to overload operations with 'use overload'. In a Roman Numerals example, dualvar will work until you want to add 2 roman numerals together.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文