惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
Apple Machine Learning Research
Apple Machine Learning Research
量子位
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
博客园 - 聂微东
博客园_首页
D
Docker
博客园 - 叶小钗
S
SegmentFault 最新的问题
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
爱范儿
爱范儿
腾讯CDC
罗磊的独立博客
雷峰网
雷峰网
博客园 - Franky

Oskyla 烹茶室

修复 Joplin on KDE 菜单栏显示问题 Copy Fail:Linux 内核 2017 年至今的高危漏洞(附临时缓解方案) | CVE-2026-31431 Hermes Agent — 在 K3s / K8s 中运行指南 在 K3s 节点上安装并使用 nerdctl Mouser:轻量开源的罗技鼠标驱动替代方案 Claude Opus 4.7:优缺点与评测信息汇总 openFuyao NPU-Operator故障排查 openFuyao 2603 共测测试报告 openFuyao InferNex AI推理集成部署 310P(300I Pro) 环境问题记录及解决 ceph mon Operation not permitted 问题解决 Ascend 310P + openFuyao + NPU-Operator 故障排查 KDE Plasma6 禁用全局菜单,恢复正常应用菜单 终极指南:在 Linux 裸机服务器上快速部署 Moltbot (原 Clawbot) 并集成飞书 Windows 配置 Claude Code 解决 settings.json 不生效 Windows 配置 Claude Code 全流程 2025-12-31 | 年终总结 AI 生图精品提示词|第二期:城市星球 AI 生图精品提示词|第一期 Kubernetes kubectl --raw 使用指南 彻底解决阿里云和 tailscale 冲突 2025-10-21 | 沉淀思维 macOS 单独为鼠标或触控板开启自然滚动 2025-10-16 | 负载高低 2025-10-15 | 睡眠周期 2025-10-14 | 转换情绪与独立观点 go 拉取 gitcode.com 私有 mod Git 将某个文件恢复到其他分支的状态 SSH 通过跳板机连接 lxc 使用 chronyc 构建 ntp 服务 2025-10-13 | 独立思考于未来能源
perl '->' 和 '::' 的区别 | 方法和函数的区别
Tianlun Song · 2021-11-25 · via Oskyla 烹茶室

本文 首发于 🌱 煎茶转载 请注明 来源

最近在看 PVE 源码时看到这样一段: # old code uses PVE::RPCEnviro

nment::get(); 使用冒号表示调用函数 # new code should use PVE::RPCEnvironment->get(); 使用箭头表示法调用方法 sub get { return PVE::RESTEnvironment->get(); } 好奇两种调用方式是什么区别,经过研

最近在看 PVE 源码时看到这样一段:

# old code uses PVE::RPCEnvironment::get(); 使用冒号表示调用函数
# new code should use PVE::RPCEnvironment->get(); 使用箭头表示法调用方法
sub get {
    return PVE::RESTEnvironment->get();
}

好奇两种调用方式是什么区别,经过研究,我在这篇文章1找到答案,两者差异在于:

  • 使用 冒号 表示 调用函数
  • 使用 箭头 表示 调用方法

以下是引用翻译:

我们知道在 Perl 中,Function 和 Subroutine 这两个名称是可以互换的。但是函数和方法的区别到底是什么呢?

表面上没有什么不同。它们都是使用 sub 关键字声明的。差异主要在于它们的使用方式。

总是使用箭头表示法调用方法。对象: $p->do_something($value) 或类: Class::Name->new

函数总是直接调用: 使用它的完全限定名: Module::Name::func_something($param) ,或者,如果函数是当前名称空间的一部分,则使用短名: func_something($param)

如果在调用它的对象的类中找不到方法, Perl 将转到父类并在那里寻找具有相同名称的方法。它将使用其内置的方法解析算法递归地执行它。如果根本找不到该方法,则它将放弃(或调用 AUTOLOAD )。另一方面, Perl 将只在单个位置查找函数(如果可用,则为 AUTOLOAD )。

方法总是将当前对象(或类名)作为其调用的第一个参数。函数永远不会得到对象。(除非您手动将其作为参数传递。)因此,方法通常作用于实例(对象) ,有时作用于整个类(然后我们称之为 class-method )。另一方面,函数从不作用于对象。尽管它可能会对班级产生影响。


  1. Methods, Functions and Subroutines in Perl and what is $self ? ↩︎