Perl 调用带括号和不带括号的方法

2024-04-16

一些 Perl 书籍建议在调用类方法时使用括号,称这有助于使解析器不必猜测代码的意图。然而,我见过的几乎所有 Perl 代码(包括 cpan 上的模块)在调用不带参数的方法时很少使用括号。

省略这些括号是正常的还是我应该总是输入它们?

我编写了一个小测试代码来测量调用带括号和不带括号的方法之间的差异,对于仅具有两个方法的类,它确实显示了 1% 和 2% 之间的微小差异。我想如果班级人数较多的话,这个问题可能会增加。

这是我用来进行基准测试的测试脚本:

#!/usr/bin/perl

use Benchmark qw(:all);

{
    package Messages;

    sub new {
        my ($self) = @_;
        return bless {}, $self;
    }

    sub message {
        my ($self) = @_;
        return "Hello world";
    }

    sub another {
        my ($self) = @_;
        return "Another Hello world";
    }
}

my $class = Messages->new();

cmpthese(10_000_000, {
    'with   ()  ' => sub { $class->message() },
    'without    ()  ' => sub { $class->message },
});

这是基准测试的结果:

                 Rate       without ()       with ()    
without ()      3320053/s          --         -1%
with    ()      3338898/s          1%          --

我想如果应用程序使用数百个模块,并且每个模块有数百个不带括号调用的方法,这是否会增加很多速度差异?

如果是这样,为什么每个人都在没有括号的情况下编码?


1% 的差异是系统噪声。两个版本都编译为完全相同的字节码,因此它们之间不可能存在系统差异。使用使您的代码更易于阅读的变体。

如果你想看看它编译成什么,你可以这样做:

perl -MO=Concise -E '$foo->bar()'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 调用带括号和不带括号的方法 的相关文章

随机推荐

  • VIM自动插入PHPdoc

    有没有办法使用命令或组合键在 VIM 中插入 PHPDoc 例如 我有一堂课 class MyClass public function construct public function destruct command here to
  • 没有扩展名的文件名叫什么?

    给定文件名foo bar baz 我们可以说foo is the dirname bar baz is the basename and baz is the extname 但是有没有一个类似的术语可以用来表示foo bar or bar
  • C++ 没有 DELETE 宏的原因

    在那儿任何好的理由 也许除了 宏是邪恶的 不使用以下宏 define DELETE ptr if ptr NULL delete ptr ptr NULL define DELETE TABLE ptr if ptr NULL delete
  • 如何应用iOS VNImageHomographicAlignmentObservation warpTransform?

    我正在测试 Apple 的 Vision Alignment API 并对 VNHomgraphicImageRegistrationRequest 有疑问 有人让它工作吗 我可以从中得到 warpTransform 但我还没有看到一个有意
  • 如何通过FTP将多个多级(不同层次)文件从本地版本覆盖到在线版本

    我只是在本地更改了几个不同目录中的许多文件 然后将更改推送到 Subversion 但这不会更改实时版本 只会更改存储库 现在我必须通过 FTP 更新这些文件 但它们都是不同的层次结构级别 我怎么做 我知道的唯一方法是采用我的整个本地版本并
  • YUV420 到 RGB 转换

    我使用以下公式将 RGB 矩阵转换为 YUV 矩阵 Y 0 257 R 0 504 G 0 098 B 16 Cr V 0 439 R 0 368 G 0 071 B 128 Cb U 0 148 R 0 291 G 0 439 B 128
  • Java中获取Spark当前任务ID

    我需要获取 Spark 中当前任务的 ID 我一直在Google和官方API中搜索 但我能找到的唯一ID是执行者ID和RDD的ID 有谁知道如何获取任务的唯一ID 我看到班级TaskInfo正是我正在寻找的东西 但我不知道如何获取此类的实例
  • 正则表达式从查询字符串中删除一个参数

    我正在寻找一个正则表达式来从查询字符串中删除单个参数 并且如果可能的话 我想在单个正则表达式中执行此操作 假设我要删除foo范围 现在我用这个 foo 只要foo不是查询字符串中的第一个参数 如果是 那么我的新查询字符串以 符号开头 例如
  • 姜戈。线程安全的更新或创建。

    我们知道 更新是线程安全的操作 这意味着 当你这样做时 SomeModel objects filter id 1 update some field 100 代替 sm SomeModel objects get id 1 sm some
  • Spring-如何保护RESTful私有资源?

    我有一些 RESTful 服务 使用 Spring MVC 实现 公开一组资源 我已经使用基于 HTTPBasicAuthentication 和 HTTPS 的身份验证 某些资源必须只能由某些用户访问 例如 我希望 URI 中的所有子资源
  • jQuery,单击时连续调用多个动画

    到目前为止 我已经做到了 所以当页面打开时 一些动画会运行以使一些图片和文本滑入视图中 我在页面顶部有链接 这些链接没有目的地 但我已将它们全部链接用于样式目的 例如效果悬停 访问等 链接有类 所有链接都有 nav 类 然后它们每个都有相关
  • WPF:列表视图在顶部而不是底部显示最近添加的项目

    我有一个集合绑定到列表视图 该集合每 4 5 秒添加一次项目 新项目将自动添加到列表视图的底部 因此 如果您想看到最新的项目 那么您需要向下滚动到底部 我的问题是 是否可以反转列表视图 以便新的最新项目位于顶部 最旧的项目位于底部 Than
  • 视频馈送至 ThingsBoard 仪表板

    我目前使用 ThingsBoard 作为 IoT 代理来捕获来自多个传感器的遥测数据并将其显示到仪表板 我想添加显示来自 iPhone 相机或网络摄像头的实时视频源的功能 我想知道这里是否有人知道 ThingsBoard 是否支持任何类型的
  • 检测PHP中是否启用cookie

    我正在尝试检测我的页面上的用户是否启用了 cookie 以下代码执行检查 但是 我不知道如何将用户重定向到他们来自的页面 该脚本启动一个会话并检查是否已检查 cookie 如果没有 它会将用户重定向到测试页面 并且由于我在第一页中调用了 s
  • R rpart:如果删除不太重要的变量,则不会分割

    我试图了解 rpart 在我试图完成的项目中如何工作 我对 R 比较陌生 但我有很多使用 SAS 构建各种分析模型的经验 首先我运行了这段代码 mtree1 lt rpart X17 data mydata method class con
  • FileInfo.Extension 是否返回最后一个 *.* 模式或其他内容?

    我很好奇以下行为到底是什么 FileInfo info new FileInfo C testfile txt gz string ext info Extension 这会返回 txt gz 还是 gz 更多扩展名 例如 txt gz z
  • 点击 CardView 时的仰角动画

    我想将海拔动画添加到我的android support v7 widget CardView 就像材质风格一样Button是的 我尝试过设置一个StateListAnimator android stateListAnimator anim
  • 如何在 FactoryGirlRails 中定义序列?

    以前在 Factory Girl 中 我们可以像这样定义序列 spec factories rb FactoryGirl define do this is the sequence in question sequence random
  • vscode api:如何从文件图标主题获取图标

    我正在为 VSCode 编写一个扩展 在 WebviewPanel 中 我需要显示来自文件图标主题的文件扩展名图标 有没有从文件图标主题中获取图标的功能 我也在研究这个 我还没有答案 但到目前为止已经有了一些线索 希望这可以帮助 https
  • Perl 调用带括号和不带括号的方法

    一些 Perl 书籍建议在调用类方法时使用括号 称这有助于使解析器不必猜测代码的意图 然而 我见过的几乎所有 Perl 代码 包括 cpan 上的模块 在调用不带参数的方法时很少使用括号 省略这些括号是正常的还是我应该总是输入它们 我编写了