问题标签 [typeglob]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
540 浏览

perl - *PIPER 在 Perl 中是什么意思?

我需要一些帮助来理解以下 Perl 代码片段。我有以下两个问题。

1. 本地是什么*PIPER意思?尽管在local *语法对我来说是新的之前我已经完成了一些 Perl 编程。是指针吗?

2. 目的是什么

谢谢你 :)

0 投票
3 回答
1437 浏览

perl - 如何在 Perl 中重命名导出的函数?

我有一些导出各种功能的 Perl 模块。(我们已经有几年没有在新模块中使用 @EXPORT 了,但保留它是为了与旧脚本兼容。)

我已经重命名了许多函数和方法以更改为一致的命名策略,并认为然后添加一个行列表,例如

在模块的末尾只会将旧名称别名为新名称。

这有效,除非导出旧名称,并且调用脚本以非限定名称调用函数:在这种情况下,它报告未找到子例程(在调用模块中)。

我猜发生的事情是,当别名尚未创建时,Exporter 会在 BEGIN 中准备列表;但我尝试将 typeglob 赋值放在 BEGIN 块中,但没有帮助。

我已经尝试过 AUTOLOAD,但当然这不会使该名称在调用上下文中可用。当然,我可以编写一系列包装函数,但这很乏味。我可能会自动生成包装函数,但我不确定如何。

任何关于处理此问题的简洁方法的建议?

0 投票
3 回答
1262 浏览

perl - Perl 子例程如何区分文件名、文件名称、*DATA 和 *STDIN?

如果我有一个可能传递文件名或各种文件句柄或类型球的函数,该函数如何区分这些参数 - 包括区分,例如,之间*DATA*STDIN

根据迄今为止收到的答案更新了代码谢谢大家。

0 投票
4 回答
603 浏览

perl - 在 Perl 中读取另一个包符号表

我正在尝试从另一个包中读取全局符号。我将包名称作为字符串。我正在qualify_to_ref使用Symbol模块

给我Not an ARRAY reference at ...... 我想我得到了取消引用的格式错误。

这是一个完整的示例程序。

0 投票
7 回答
2198 浏览

perl - perl: 遍历一个 typeglob

给定一个 typeglob,我怎样才能找到实际定义的类型?

在我的应用程序中,我们使用 PERL 作为一种简单的配置格式。我想 require() 用户配置文件,然后能够查看定义了哪些变量,以及它们是什么类型。

代码:(有问题的质量咨询)

我的配置:

输出:

0 投票
2 回答
6875 浏览

perl - 为什么这个 Perl 会产生“Not a CODE reference”?

我需要在运行时从 Perl 符号表中删除一个方法。我尝试使用 来执行此操作undef &Square::area,它确实删除了该功能,但留下了一些痕迹。具体来说,当$square->area()被调用时,Perl 抱怨它是“不是代码引用”而不是“未定义的子例程 &Square::area called”,这是我所期望的。

你可能会问,“为什么重要?你删除了这个函数,你为什么要调用它?” 答案是我不叫它,Perl 是。Square 继承自 Rectangle,我希望继承链传递$square->area&Rectangle::area,但不是跳过该方法不存在的 Square 然后落入 Rectangle 的 area(),而是方法调用以“不是 CODE 引用”而终止。

奇怪的是,这似乎只发生在 &Square::area 由 typeglob 赋值定义时(例如*area = sub {...})。如果函数是使用标准sub area {}方法定义的,则代码将按预期工作。

同样有趣的是,取消定义整个 glob 按预期工作。只是不取消定义子程序本身。

这是一个简短的示例,说明了症状,并与正确的行为形成对比:

更新:我已经使用 Package::Stash 解决了这个问题(感谢@Ether),但我仍然对它首先发生的原因感到困惑。perldoc perlmod说:

package main;

sub Some_package::foo { ... } # &foo defined in Some_package

这只是编译时 typeglob 赋值的简写:

BEGIN { *Some_package::foo = sub { ... } }

但它似乎不仅仅是简写,因为两者在取消定义函数后会导致不同的行为。如果有人能告诉我这是(1)不正确的文档,(2)perl中的错误,还是(3)PEBCAK,我将不胜感激。

0 投票
4 回答
1080 浏览

perl - 如何在 perl 中使用 typeglob 做与引用相同的事情?

如何在 perl中使用typeglob做与引用相同的事情?

perl 解释的确切步骤是$$ref{key}什么?

0 投票
4 回答
286 浏览

perl - 在 Perl 中,直接全局别名和通过 stash 别名之间有什么区别吗?

在 Perl 中,以下两种结构之间是否有任何区别:

它们似乎具有相同的功能(将所有插槽别名为 中*main::foo定义的插槽*main::bar),但我只是想知道这种等效性是否始终成立。

0 投票
2 回答
206 浏览

perl - 如何通过 typeglob 分别访问文件句柄和格式?

在此处输入图像描述

它似乎filehandleformat没有任何前缀,所以我无法通过%{*spud}.

有什么我想念的吗?

更新

如何访问format?为什么$fd=*STDOUT$fd=\*STDOUT两者都有效?

更新2

代码:

输出:

0 投票
2 回答
98 浏览

perl - 为什么 Net::SSL 中的代码在我看不到需要的地方取消引用 typeglob?

Net::SSL是 Crypt::SSLeay 的一部分。今天在编写错误报告时,我被这个可怜的老人出现了多少次而分心*

例如,考虑Net::SSL::configure

也许是因为我对 5.8 之前的 Perl 不太熟悉,但我无法确定*在 LHS 上使用是否有重要原因。还*$self->{ssl_peer_port} = $arg->{PeerPort};不够吗?或者,这里有什么深层次的东西(例如local $_vs local *_)?