13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

第 一 种 形 式 更 高 效 是 因 为 main 符 号 表 是 在 编 译 时 被 访 问 的 。 而 且 它 还 会 在 该 名 字 的 类 型团 不 存 在 的 时 候 创 建 一 个 新 的 , 但 是 第 二 种 则 不 会 。因 为 包 是 散 列 , 因 此 你 可 以 找 出 该 包 的 键 字 然 后 获 取 所 有 包 中 的 变 量 。 因 此 该 散 列 的 数 值 都是 类 型 团 , 你 可 以 用 好 几 种 方 法 解 引 用 。 比 如 :foreach $symname (sort keys %main::) {local *sym = $main::{$symname};print "\$$symname is defined\n" if defined $sym;print "\@$symname is nonnull\n" ifprint "\%$symname is nonnull\n" if@sym;%sym;}因 为 所 有 包 都 可 以 ( 直 接 或 间 接 地 ) 通 过 main 包 访 问 , 因 此 你 可 以 在 你 的 程 序 里 写 出 访问 每 一 个 包 变 量 的 <strong>Perl</strong> 代 码 。 当 你 用 v 命 令 要 求 <strong>Perl</strong> 调 试 器 倾 倒 所 有 你 的 变 量 的 时 候 ,它 干 的 事 情 就 是 这 个 。 请 注 意 , 如 果 你 做 这 些 事 情 , 那 么 你 将 看 不 到 用 my 声 明 的 变 量 ,因 为 它 们 都 是 独 立 于 包 的 , 不 过 你 看 得 到 用 our 声 明 的 变 量 。 参 阅 第 二 十 章 ,<strong>Perl</strong> 调 试器 。早 些 时 候 我 们 说 过 除 了 在 main 里 , 其 他 的 包 里 只 能 存 储 标 识 符 。 我 们 在 这 里 撒 了 个 小 慌 :你 可 以 在 一 个 符 号 表 散 列 里 使 用 任 何 你 需 要 的 字 串 作 为 键 字 —— 只 不 过 如 果 你 企 图 直 接 使用 一 个 非 标 识 符 的 时 候 它 就 不 是 有 效 的 <strong>Perl</strong>:$!@#$% = 0; # 错 , 语 法 错#{'!@#$%'} = 1; # 正 确 , 用 的 是 未 修 饰 的${'main::!@#$%'} = 2; # 可 以 在 字 串 里 修 饰 。print ${ $main::{'!@#$%'}} # 正 确 , 打 印 2给 一 个 匿 名 类 型 团 赋 值 执 行 一 个 别 名 操 作 ; 也 就 是 ,*dick= *richard;导 致 所 有 可 以 通 过 标 识 符 richard 访 问 的 变 量 , 子 过 程 , 格 式 , 文 件 和 目 录 句 柄 也 可 以 通过 符 号 dick 访 问 。 如 果 你 只 需 要 给 一 个 特 定 的 变 量 或 者 子 过 程 取 别 名 , 那 么 使 用 一 个 引 用 :269

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!