perl和python區別?
一句話速覽:
Python 包 = 目錄約定;Java 包 = 目錄 + 類路徑;Perl 包 = 純命名空間。同名不同義。
| 維度 | Python 包 | Java 包 | Perl 包 |
|---|---|---|---|
| 本質 | 文件系統目錄 + __init__.py |
目錄層級 + 包聲明 | 邏輯命名空間(package 聲明) |
| 物理要求 | 必須對應目錄結構 | 必須對應目錄結構 | 文件隨意,跟目錄結構無關 |
| 聲明方式 | __init__.py 存在即包 |
package com.xxx; |
package Foo::Bar; |
| 導入語法 | import pkg.mod |
import com.xxx.Cls |
use Foo::Bar; |
| 子層級 | 目錄嵌套 | 目錄嵌套 | 邏輯 :: 分隔 |
| 文件后綴 | .py |
.java → .class |
.pm |
| 訪問符 | . |
. |
:: |
| 元信息 | __init__.py, setup.py |
module-info.java (JPMS) |
our $VERSION |
記憶口訣:
Python/Java 的“包”靠文件夾;
Perl 的“包”只是名字加冒號:
package Foo;
只創建一級命名空間 Foo,簡單場景夠用。
風險:如果以后還要寫 Foo::Bar、Foo::Baz,就會跟 Foo 里的符號混在一起,容易沖突。
package Foo::Bar;
直接聲明二級命名空間 Foo::Bar,邏輯更清晰:
Foo 這一層還能留作更高層次的公共接口或工具子包;
子模塊 Bar 不會污染 Foo 的符號表。
# 文件 Foo/Bar.pm
package Foo::Bar; # 以后還能有 Foo::Baz、Foo::Util ...
sub hi { "Bar" }
1;
# 使用
use Foo::Bar;
print Foo::Bar::hi; # Bar
如果只想寫一個小模塊,用 package Foo; 完全沒問題;
一旦項目變大,多級命名空間(Foo::Bar) 更易于維護和避免沖突。
海納百川 ,有容乃大

浙公網安備 33010602011771號