13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

CLASSNAME->TIESCALAR(LIST)每 当 你 tie 一 个 标 量 变 量 , 都 会 触 发 该 类 的 TIESCALAR 方 法 。 可 选 的 LIST 包 含 任 意正 确 初 始 化 该 对 象 所 需 要 的 参 数 。( 在 我 们 的 例 子 里 , 只 有 一 个 参 数 : 该 文 件 的 名 字 。)这 个 方 法 应 该 返 回 一 个 对 象 , 不 过 这 个 对 象 不 必 是 一 个 标 量 的 引 用 。 不 过 在 我 们 的 例 子 里是 标 量 的 引 用 。sub TIESCALAR {# 在 ScalarFile.pmmy $class = shift;my $filename = shift;$count++;# 一 个 文 件 范 围 的 词 法 , 是 类 的 私 有 部 分return bless \$filename, $class;}因 为 匿 名 数 组 和 散 列 构 造 器 ([] 和 {}) 没 有 标 量 等 价 物 , 我 们 只 是 赐 福 一 个 词 法 范 围 的 引用 物 , 这 样 , 只 要 这 个 名 字 超 出 范 围 , 它 就 变 成 一 个 匿 名 。 这 样 做 运 转 得 很 好 ( 你 可 以 对数 组 和 散 列 干 一 样 的 事 情 )—— 只 要 这 个 变 量 真 的 是 词 法 范 围 。 如 果 你 在 一 个 全 局 量 上 使用 这 个 技 巧 , 你 可 能 会 以 为 你 成 功 处 理 了 这 个 全 局 量 , 但 直 到 你 创 建 另 外 一 个 camel.lot的 时 候 才 能 意 识 到 这 是 错 的 。 不 要 试 图 写 下 面 这 样 的 东 西 :sub TIESCALAR {bless \$_[1], $_[0] } # 错 , 可 以 引 用 全 局 量 。一 个 写 得 更 强 壮 一 些 的 构 造 器 可 能 会 检 查 该 文 件 名 是 否 可 联 合 。 我 们 首 先 检 查 , 看 看 这 个文 件 是 否 可 读 , 因 为 我 们 不 想 毁 坏 现 有 的 数 值 。( 换 句 话 说 , 我 们 不 应 该 假 设 用 户 准 备 先写 。 他 们 可 能 很 珍 惜 此 程 序 以 前 运 行 留 下 来 的 旧 的 Camel Lot 文 件 。) 如 果 我 们 不 能 打 开或 者 创 建 所 声 明 的 文 件 名 , 我 们 将 通 过 返 回 一 个 undef 礼 貌 地 指 明 该 错 误 , 并 且 还 可 以 通过 carp 打 印 一 个 警 告 。( 我 们 还 可 以 只 用 croak —— 这 是 口 味 的 问 题 , 取 决 于 你 喜 欢鱼 还 是 牛 蛙 。) 我 们 将 使 用 warnings 用 法 来 判 断 这 个 用 户 是 否 对 我 们 的 警 告 感 兴 趣 :sub TIESCALAR {# 在 ScalarFile.pmmy $class = shift;my $filename = shift;my $fh;if (open $fh, "

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

Saved successfully!

Ooh no, something went wrong!