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

perl – 如果你不放1会怎样?在包裹的最后?

发布时间:2020-12-15 23:22:48 所属栏目:大数据 来源:网络整理
导读:如果你不放1,会发生什么?在包裹的最后?例如,如果我删除1;从以下脚本,代码仍然运行: #!/usr/bin/perlpackage Foo;print "Begin and Block Demon";BEGIN { print "This is BEGIN Blockn" }END { print "This is END Blockn" }1; 是1;是否必须创建包?我
如果你不放1,会发生什么?在包裹的最后?例如,如果我删除1;从以下脚本,代码仍然运行:

#!/usr/bin/perl

package Foo;
print "Begin and Block Demon";

BEGIN { 
    print "This is BEGIN Blockn" 
}

END { 
    print "This is END Blockn" 
}

1;

是1;是否必须创建包?我看到this question,但它没有解释如果1;省略.

解决方法

这有点棘手.如果包装将通过使用或要求加载,则只需要它.

从require起

The file must return true as the last statement to indicate successful execution of any initialization code,so it’s customary to end such a file with 1; unless you’re sure it’ll return true otherwise. But it’s better just to put the 1;,in case you add more statements.

use归结为require,因此无论何时使用模块,返回的最后一个语句必须返回true,否则编译失败.确保这一点的一个简单方法是放1;在末尾.如果你从不使用(或要求)那个包,那么你不必拥有1(真).

通过use引入程序的文件中的代码实际运行,并且必须按照require的要求返回true.如果以另一种方式读入文件,则没有“返回”的概念.

如果它作为可执行文件运行,那么再次没有真正返回的要求,因为不涉及require.但是,我们通常编写包以便使用它们,而不是将它们作为程序运行.所以实际上应该总是有1;在末尾.

perlmod也需要阅读.

这是一个简单的例子.这个

文件Mod.pm

package Mod;

# print "hellon";    # works with this line uncommented

文件script.pl

use Mod;

当由perl script.pl打印时

Mod.pm did not return a true value at main.pl line 1.
BEGIN failed--compilation aborted at main.pl line 1.

使用包时,它必须返回一个真值.如果最后一次返回来自一个恰好返回true的语句,就像注释掉的打印一样,那么一切都很好.

但是我们可以运行perl Mod.pm而不管它返回什么.

(编辑:李大同)

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

    推荐文章
      热点阅读