gpt4 book ai didi

perl - 如何让 Perl 的 ref() 函数返回 REF、IO 和 LVALUE?

转载 作者:行者123 更新时间:2023-12-03 18:17:00 24 4
gpt4 key购买 nike

ref() 的文档提到了几个可能的返回值。我了解其中大部分,但不是REF , IO , 和 LVALUE .我将如何编写 Perl 代码来导致 ref返回这些值?

阅读 typeglobs and file handles 上的文档后, 我接近 IO使用此代码:

open(INPUT, '<', 'foo.pl');
print ref(*INPUT{IO}), "\n"; # Prints IO::Handle

对于 REFLVALUE我尝试了几种奇怪的结构,但都没有成功。

最佳答案

这是生成其中大部分内容的快速简便的方法:

use 5.010;
say 'SCALAR: ', ref \undef;
say 'ARRAY: ', ref [1..5];
say 'HASH: ', ref { key => 'value' };
say 'CODE: ', ref sub {};
say 'REF: ', ref \\undef;
say 'GLOB: ', ref \*_;
say 'LVALUE: ', ref \substr "abc", 1, 2;
say 'LVALUE: ', ref \vec 42, 1, 2;
say 'FORMAT: ', ref *STDOUT{FORMAT}; # needs declaration below
say 'IO: ', ref *STDIN{IO}; # actually prints IO::Handle
say 'VSTRING: ', ref \v5.10.0;
say 'Regexp: ', ref qr/./;

format =
.

REF 只是对另一个引用的引用。 LVALUE 是标量的一种特殊情况,如果它被修改就会产生外部影响。

IO 是句柄后面的基本类型,您可以使用 Acme::Damn from CPAN 使其显式显示.正如 Michael Carman 在评论中所指出的那样,您真的不应该祝福对象 - 不要在实际代码中使用。
use Acme::Damn;
say 'IO: ', ref damn *STDIN{IO}; # really prints IO
ref的来源函数也有一些代码来显示“BIND”和“UNKNOWN”,但不应该有办法在不弄乱内部结构的情况下获得它们。 Blead 还有一个有趣的未祝福的“REGEXP”(不同于上面的“Regexp”);如果有人知道如何制作 ref产生那个……

关于perl - 如何让 Perl 的 ref() 函数返回 REF、IO 和 LVALUE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com