问题标签 [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.
perl - *PIPER 在 Perl 中是什么意思?
我需要一些帮助来理解以下 Perl 代码片段。我有以下两个问题。
1. 本地是什么*PIPER
意思?尽管在local *
语法对我来说是新的之前我已经完成了一些 Perl 编程。是指针吗?
2. 目的是什么
谢谢你 :)
perl - 如何在 Perl 中重命名导出的函数?
我有一些导出各种功能的 Perl 模块。(我们已经有几年没有在新模块中使用 @EXPORT 了,但保留它是为了与旧脚本兼容。)
我已经重命名了许多函数和方法以更改为一致的命名策略,并认为然后添加一个行列表,例如
在模块的末尾只会将旧名称别名为新名称。
这有效,除非导出旧名称,并且调用脚本以非限定名称调用函数:在这种情况下,它报告未找到子例程(在调用模块中)。
我猜发生的事情是,当别名尚未创建时,Exporter 会在 BEGIN 中准备列表;但我尝试将 typeglob 赋值放在 BEGIN 块中,但没有帮助。
我已经尝试过 AUTOLOAD,但当然这不会使该名称在调用上下文中可用。当然,我可以编写一系列包装函数,但这很乏味。我可能会自动生成包装函数,但我不确定如何。
任何关于处理此问题的简洁方法的建议?
perl - Perl 子例程如何区分文件名、文件名称、*DATA 和 *STDIN?
如果我有一个可能传递文件名或各种文件句柄或类型球的函数,该函数如何区分这些参数 - 包括区分,例如,之间*DATA
和*STDIN
?
根据迄今为止收到的答案更新了代码谢谢大家。
perl - 在 Perl 中读取另一个包符号表
我正在尝试从另一个包中读取全局符号。我将包名称作为字符串。我正在qualify_to_ref
使用Symbol
模块
给我Not an ARRAY reference at ......
我想我得到了取消引用的格式错误。
这是一个完整的示例程序。
perl - perl: 遍历一个 typeglob
给定一个 typeglob,我怎样才能找到实际定义的类型?
在我的应用程序中,我们使用 PERL 作为一种简单的配置格式。我想 require() 用户配置文件,然后能够查看定义了哪些变量,以及它们是什么类型。
代码:(有问题的质量咨询)
我的配置:
输出:
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,我将不胜感激。
perl - 如何在 perl 中使用 typeglob 做与引用相同的事情?
如何在 perl中使用typeglob做与引用相同的事情?
perl 解释的确切步骤是$$ref{key}
什么?
perl - 在 Perl 中,直接全局别名和通过 stash 别名之间有什么区别吗?
在 Perl 中,以下两种结构之间是否有任何区别:
和
它们似乎具有相同的功能(将所有插槽别名为 中*main::foo
定义的插槽*main::bar
),但我只是想知道这种等效性是否始终成立。
perl - 如何通过 typeglob 分别访问文件句柄和格式?
它似乎filehandle
并format
没有任何前缀,所以我无法通过%{*spud}
.
有什么我想念的吗?
更新
如何访问format
?为什么$fd=*STDOUT
和$fd=\*STDOUT
两者都有效?
更新2
代码:
输出:
perl - 为什么 Net::SSL 中的代码在我看不到需要的地方取消引用 typeglob?
Net::SSL
是 Crypt::SSLeay 的一部分。今天在编写错误报告时,我被这个可怜的老人出现了多少次而分心*
。
例如,考虑Net::SSL::configure
:
也许是因为我对 5.8 之前的 Perl 不太熟悉,但我无法确定*
在 LHS 上使用是否有重要原因。还*$self->{ssl_peer_port} = $arg->{PeerPort};
不够吗?或者,这里有什么深层次的东西(例如local $_
vs local *_
)?