加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何引用Perl子例程?

发布时间:2020-12-15 21:42:01 所属栏目:大数据 来源:网络整理
导读:我在搞清楚如何在外部模块文件中引用子例程时遇到了一些麻烦.现在,我这样做: 外部文件 package settingsGeneral; sub printScreen { print $_[0];} 主要 use settingsGeneral; my $printScreen = settingsGeneral::printScreen;$printScreen("test"); 但这
我在搞清楚如何在外部模块文件中引用子例程时遇到了一些麻烦.现在,我这样做:

外部文件

package settingsGeneral;    
sub printScreen {
    print $_[0];
}

主要

use settingsGeneral;    
my $printScreen = settingsGeneral::printScreen;
&$printScreen("test");

但这会导致错误:
在使用“strict refs”时,不能使用字符串(“1”)作为子程序ref

解决方法

如 perlmodlib所述,您应该使用大写字母开始模块的名称:

Perl informally reserves lowercase module names for ‘pragma’ modules like integer and strict. Other modules normally begin with a capital letter and use mixed case with no underscores (need to be short and portable).

调用另一个包中定义的子的一种方法是在调用它时完全限定该子名称:

SettingsGeneral::printScreen "important messagen";

如果你想要的只是printScreen的引用,请使用反斜杠操作符来获取它

my $subref = &;SettingsGeneral::printScreen;

并用其中一个调用它

&$subref("onen");
&{$subref}("twon");
$subref->("threen");

您可以在当前包中创建一个alias:

*printScreen = &;SettingsGeneral::printScreen;
printScreen("another urgent flashn");

通过编写以下内容来跳过括号(必要,因为当前包中的sub在编译时是未知的)

use subs 'printScreen';
*printScreen = &;SettingsGeneral::printScreen;
printScreen "the sky is falling!n";

Exporter模块可以为您执行此保管工作:

SettingsGeneral.pm:

package SettingsGeneral;

use Exporter 'import';

our @EXPORT = qw/ printScreen /;

sub printScreen {
  print $_[0];
}

1;

主要:

#! /usr/bin/perl

use warnings;
use strict;

use SettingsGeneral;

printScreen "foo!n";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读