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.

决 于 环 境 。 在 列 表 环 境 里 ,m//g 返 回 所 有 找 到 的 东 西 的 列 表 。 下 面 的 语 句 找 出 所 有 我 们 提到 的 "perl", "<strong>Perl</strong>","PERL" 的 地 方 :if( @perls = $paragrapth =~ /perl/gi) {printf "<strong>Perl</strong> mentioned %d times.\n", scalar @perls;}如 果 在 /g 模 式 里 没 有 捕 获 圆 括 弧 , 那 么 返 回 完 整 的 匹 配 。 如 果 有 捕 获 圆 括 弧 , 那 么 返 回捕 获 到 的 字 串 。 想 象 一 下 这 样 的 字 串 :$string = "password=xyzzy verbose=9 score=0";并 且 假 设 你 想 用 这 个 字 串 初 始 化 下 面 这 样 的 散 列 :%hash = (password => "xyzzy", verbose => 9, socre => 0);当 然 , 你 有 字 串 但 还 没 有 列 表 。 要 获 取 对 应 的 列 表 , 你 可 以 在 列 表 环 境 里 用 m//g 操 作 符 ,从 字 串 里 捕 获 所 有 的 键 / 值 对 :%hash = $string =~ /(\w+)=(\w+)/g;(\w+) 序 列 捕 获 一 个 字 母 数 字 单 词 。 参 阅 “ 捕 获 和 集 群 ” 节 。在 标 量 环 境 里 使 用 时 ,/g 修 饰 词 表 明 一 次 渐 进 地 匹 配 , 它 令 <strong>Perl</strong> 从 上 一 次 匹 配 停 下 来 的位 置 开 始 一 次 对 同 一 个 变 量 的 新 的 匹 配 。\G 断 言 表 示 字 符 串 中 的 那 个 位 置 ;\G 的 描 述 请参 阅 本 章 后 面 的 “ 位 置 ” 一 节 。 如 果 除 了 用 /g, 你 还 用 了 /c( 表 示 “ 连 续 ”) 修 饰 词 , 那 么 当/g 运 行 结 束 后 , 失 败 的 匹 配 不 会 重 置 位 置 指 针 。如 果 分 隔 符 是 ?, 就 象 ?PATTERN?, 那 么 运 行 起 来 和 /PATTERN/ 搜 索 一 样 , 区 别 是 它在 两 次 reset 操 作 符 调 用 之 间 只 匹 配 一 次 。 如 果 你 只 想 匹 配 程 序 运 行 中 模 式 出 现 的 第 一 次 ,而 不 是 所 有 的 出 现 , 那 么 这 是 一 个 很 方 便 的 优 化 方 法 。 你 每 次 调 用 此 操 作 符 时 都 会 运 行 搜 索 ,直 到 它 最 终 匹 配 了 什 么 东 西 , 然 后 它 就 关 闭 自 身 , 在 你 明 确 地 用 reset 把 它 重 置 之 前 它 一直 返 回 假 。<strong>Perl</strong> 替 你 跟 踪 这 个 匹 配 状 态 。当 一 个 普 通 模 式 匹 配 想 找 出 最 后 一 个 匹 配 而 不 是 第 一 个 , 那 么 ?? 操 作 符 很 好 用 :open DICT, "/usr/dict/words" or die "Can't open words: $!\n";while () {$first = $1 if ?(^neur.*)?;157

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

Saved successfully!

Ooh no, something went wrong!