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.

5.2 模 式 匹 配 操 作 符从 动 物 学 角 度 来 说 ,<strong>Perl</strong> 的 模 式 匹 配 操 作 符 函 数 是 某 种 用 来 关 正 则 表 达 式 的 笼 子 。 我 们 是有 意 这 么 设 计 的 ; 如 果 我 们 任 由 正 则 怪 兽 在 语 言 里 四 处 乱 逛 ,<strong>Perl</strong> 就 完 全 是 一 个 原 始 丛 林了 。 当 然 , 世 界 需 要 丛 林 —— 它 们 是 生 物 种 类 多 样 性 的 引 擎 , 但 是 , 丛 林 毕 竟 应 该 放 在 它 们应 该 在 的 位 置 。 一 样 , 尽 管 也 是 组 合 多 样 化 的 引 擎 , 正 则 表 达 式 也 应 该 放 在 它 们 应 该 在 的 模式 匹 配 操 作 符 里 面 。 那 里 是 另 外 一 个 丛 林 。因 为 正 则 表 达 式 还 不 够 强 大 ,m// 和 s/// 操 作 符 还 提 供 了 ( 同 样 也 是 限 制 ) 双 引 号 代 换的 能 力 。 因 为 模 式 是 按 照 类 似 双 引 号 字 串 那 样 分 析 的 , 所 以 所 有 的 双 引 号 代 换 都 有 效 , 包 括变 量 代 换 ( 除 非 你 用 单 引 号 做 分 隔 符 ) 和 用 反 斜 杠 逃 逸 标 识 的 特 殊 字 符 。( 参 阅 本 章 后 面 的 "特 殊 字 符 "。) 在 字 串 被 解 释 成 正 则 表 达 式 之 前 首 先 应 用 这 些 代 换 。( 也 是 <strong>Perl</strong> 语 言 里 极少 数 的 几 个 地 方 之 一 , 在 这 些 地 方 一 个 字 串 要 经 过 多 于 一 次 处 理 。) 第 一 次 处 理 是 不 那 么 正常 的 双 引 号 代 换 , 不 正 常 是 因 为 它 知 道 它 应 该 转 换 什 么 和 它 应 该 给 正 则 表 达 式 分 析 器 传 递 什么 。 因 此 , 任 何 后 面 紧 跟 竖 直 条 , 闭 圆 括 弧 或 者 字 符 串 结 尾 的 $ 都 不 会 被 当 作 变 量 代 换 ,而 是 当 作 典 型 的 正 则 表 达 式 的 行 尾 断 言 。 所 以 , 如 果 你 说 :$foo = "bar";/$foo$/;双 引 号 代 换 过 程 是 知 道 那 两 个 $ 符 作 用 是 不 同 的 。 它 先 做 $foo 的 变 量 代 换 , 然 后 把 剩 下的 交 给 正 则 表 达 式 分 析 器 :/bar$/;这 种 两 回 合 分 析 的 另 一 个 结 果 是 普 通 的 <strong>Perl</strong> 记 号 分 析 器 首 先 查 找 正 则 表 达 式 的 结 尾 , 就 好象 它 在 查 找 一 个 普 通 字 串 的 结 尾 分 隔 符 一 样 。 只 有 在 它 找 到 字 串 的 结 尾 后 ( 并 且 完 成 任 意 变量 代 换 ), 该 模 式 才 被 当 作 正 则 表 达 式 对 待 。 这 意 味 着 你 无 法 在 一 个 正 则 构 造 里 面 “ 隐 藏 ”模 式 的 结 尾 分 隔 符 ( 比 如 一 个 字 符 表 或 者 一 个 正 则 注 释 , 我 们 还 没 有 提 到 这 些 东 西 )。<strong>Perl</strong>总 是 会 在 任 何 地 方 识 别 该 分 隔 符 并 且 在 该 处 结 束 该 模 式 。你 还 应 该 知 道 在 模 式 里 面 代 换 变 量 会 降 低 模 式 匹 配 的 速 度 , 因 为 它 会 觉 得 需 要 检 查 变 量 是 否曾 经 变 化 过 , 如 果 变 化 过 , 那 么 它 必 须 重 新 编 译 模 式 ( 这 样 更 会 降 低 速 度 )。 参 阅 本 章 后 面的 “ 变 量 代 换 ”。tr/// 转 换 操 作 符 不 做 变 量 代 换 ; 它 甚 至 连 正 则 表 达 式 都 不 用 !( 实 际 上 , 它 可 能 并 不 属 于本 章 , 但 我 们 实 在 想 不 出 更 好 的 地 方 放 它 。) 不 过 , 它 在 一 个 方 面 还 是 和 m// 和 s/// 一样 的 : 它 用 =~ 和 !~ 操 作 符 与 变 量 绑 定 。148

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

Saved successfully!

Ooh no, something went wrong!