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.

在 特 别 的 环 境 里 , 你 在 开 始 写 程 序 的 时 候 可 能 不 知 道 你 需 要 什 么 样 的 引 用 。 你 可 以 用 一 种 特殊 的 语 法 创 建 引 用 , 人 们 常 说 是 *foo{THING} 语 法 。*foo{THING} 返 回 一 个 指 向*foo 里 面 THING 槽 位 的 引 用 , 这 个 引 用 就 是 在 符 号 表 里 保 存 $foo,@foo,%foo, 和友 元 的 记 录 。$scalarref = *foo{SCALAR};$arrayref = *ARGV{ARRAY};# 和 \$foo 一 样# 和 \@ARGV 一 样$hashref = *ENV{HASH}; # 和 \%ENV 一 样$coderef = *handler{CODE}; # 和 \&handler 一 样$globref = *foo{GLOB}; # 和 \*foo 一 样$ioref = *STDIN{IO}; # ?...所 有 这 些 语 句 都 具 有 自 释 性 , 除 了 *STDIN{IO} 之 外 。 它 生 成 该 类 型 团 包 含 的 实 际 的 内部 IO::Handle 对 象 , 也 就 是 各 种 I/O 函 数 实 际 上 感 兴 趣 的 类 型 团 的 部 分 。 为 了 和 早 期版 本 的 <strong>Perl</strong> 兼 容 ,*foo{FILEHANDLE} 是 上 面 的 *foo{IO} 说 法 的 一 个 同 义 词 。理 论 上 来 说 , 你 可 以 在 任 何 你 能 用 *HANDLE 或 者 \*HANDLE 的 地 方 使 用*HANDLE{IO}, 比 如 将 文 件 句 柄 传 入 或 者 传 出 子 过 程 , 或 者 在 一 个 更 大 的 数 据 结 构 里 存储 它 们 。( 实 际 上 , 仍 然 有 一 些 地 方 不 能 这 么 互 换 着 用 。) 它 们 的 优 点 是 它 们 只 访 问 你 需 要的 真 实 的 I/O, 而 不 是 整 个 类 型 团 , 因 此 如 果 你 通 过 一 个 类 型 团 赋 值 剪 除 了 比 你 预 计 的 要多 的 东 西 也 不 会 有 什 么 风 险 ( 但 如 果 你 总 是 给 一 个 标 量 变 量 赋 值 而 不 是 给 类 型 团 赋 值 , 那 么你 就 OK 了 )。 缺 点 是 目 前 没 有 办 法 自 动 激 活 这 么 一 个 。( 注 : 目 前 ,open my $fh 自动 激 活 一 个 类 型 团 而 不 是 一 个 IO::Handle 对 象 , 不 过 有 朝 一 日 我 们 总 会 修 正 这 个 问 题的 , 所 以 你 不 应 该 依 赖 open 目 前 自 动 激 活 的 类 型 团 的 特 征 )。splutter(*STDOUT);splutter(*STDOUT{IO});sub splutter {my $fh = shift;print $fh "her um well a hmmm\n";}216

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

Saved successfully!

Ooh no, something went wrong!