为什么Perl允许模块之间相互"使用"的关系?

Hai*_*ang 8 perl

假设有两个相互使用的模块:

package a;
use b;
sub p {}

1;

package b;
use a;
1;
Run Code Online (Sandbox Code Playgroud)

我认为编写如上所述的代码是系统错误的,因为这两个模块会无休止地将彼此的代码复制到自己,但我可以成功运行以下代码,这让我非常惊讶.你们中有谁能向我解释这一切吗?

#! /usr/bin/perl
use a;
a->p();
Run Code Online (Sandbox Code Playgroud)

Dav*_*man 15

因为这两个模块会无休止地将彼此的代码复制到自己身上

不,他们不会,因为你用代码证明了工作让你感到惊讶.Perl中保持在记录%INC其中的模块已经加载userequire并不会尝试重新加载他们,如果他们得到used或requireD组合键.


mus*_*iKk 9

有(至少)三种不同负荷的东西不同的方式:use,requiredo.

use基本上是一个拉皮条require和的perldoc 状态require:要求如果尚未包括它是一个库文件包含的需求.那没问题.

do是一个不同的故事.它执行文件,或多或少像evalC或#include.相互包容通过do应该是致命的.


pmo*_*mod 7

据我记得"use"perl指令执行检查模块是否已经加载.这是通过调用require()函数完成的.所以,没有无尽的副本.