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.

现 在 , 如 果 你 将 设 计 一 种 可 以 支 持 不 定 数 量 的 任 意 参 数 的 语 言 , 你 最 好 让 你 的 语 言 在 处 理 这些 任 意 长 的 参 数 列 表 上 容 易 些 . 所 有 传 入 <strong>Perl</strong> 过 程 的 参 数 都 是 以 @_ 身 份 传 入 的 . 如 果你 调 用 一 个 有 两 个 参 数 的 函 数 , 它 们 在 函 数 内 部 可 以 作 为 @_ 数 组 的 前 两 个 成 员 访 问 :$_[0] 和 $_[1]. 因 为 @_ 只 是 一 个 有 着 奇 怪 名 字 的 普 通 数 组 , 所 以 你 可 以 象 处 理 普 通数 组 一 样 随 意 处 理 它 .( 注 : 这 个 领 域 是 <strong>Perl</strong> 和 传 统 的 编 程 语 言 冲 突 得 最 厉 害 的 地 方 .)数 组 @_ 是 一 个 本 地 数 组 , 但 是 它 的 值 是 实 际 标 量 参 数 的 别 名 ( 通 常 称 为 引 用 传 参 ) 因 而 如果 修 改 了 @_ 中 的 成 员 那 么 同 时 也 修 改 了 对 应 的 实 际 参 数 的 值 .( 通 常 的 语 言 中 很 少 这 么做 , 但 是 采 用 这 种 方 法 在 <strong>Perl</strong> 中 可 以 很 容 易 的 返 回 所 需 要 的 值 ).子 过 程 ( 其 他 的 程 序 块 也 一 样 ) 的 返 回 值 是 过 程 最 后 一 个 表 达 式 的 值 . 或 者 你 可 以 在 子 过 程 的任 何 一 个 地 方 明 确 使 用 一 个 return 语 句 来 返 回 值 并 且 退 出 子 过 程 . 不 管 是 那 种 方 法 , 当在 一 个 标 量 或 列 表 环 境 中 调 用 子 过 程 时 , 最 后 一 个 表 达 也 将 在 同 样 的 标 量 或 列 表 环 境 中 求值 .2.1 参 数 列 表 的 技 巧<strong>Perl</strong> 没 有 命 名 的 正 式 参 数 , 但 是 在 实 际 中 你 可 以 将 @_ 的 值 拷 贝 到 一 个 my 列 表 , 这 样就 可 以 方 便 使 用 这 些 正 式 参 数 ( 不 一 样 的 是 , 这 样 拷 贝 就 将 引 用 传 参 的 语 义 变 为 了 传 值 传 参 ,也 许 传 值 传 参 正 是 很 多 用 户 通 常 希 望 参 数 被 处 理 的 方 法 , 即 使 他 们 不 知 道 这 些 计 算 机 术 语 ),下 面 是 一 个 典 型 的 例 子 :sub aysetenv {my ($key, $value) = @_;$ENV{$key} = $value unless $ENV{$key};}但 是 没 人 要 你 一 定 要 给 你 的 参 数 命 名 , 这 就 是 @_ 数 组 的 全 部 观 点 . 例 如 , 计 算 一 个 最 大值 , 你 可 以 简 单 直 接 遍 历 @_ 数 组 :sub max {$max = shift(@_);for my $item (@_) {$max = $item if $max < $item;}182

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

Saved successfully!

Ooh no, something went wrong!