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.

}这 将 得 到 一 个 单 目 操 作 符 ( 象 rand 内 建 函 数 ) 并 且 改 变 了 编 译 器 确 定 函 数 参 数 的 方 法 . 使用 了 新 的 函 数 原 型 , 该 函 数 就 只 使 用 一 个 标 量 环 境 下 的 参 数 , 而 不 是 在 列 表 环 境 下 的 多 个 参数 . 如 果 你 在 以 数 组 或 者 列 表 表 达 式 中 调 用 这 个 函 数 , 即 使 这 个 数 组 或 列 表 只 包 含 一 个 元 素 ,你 可 能 会 得 到 完 全 不 同 的 结 果 :func @foo;func split /:/;# 计 算 @foo 元 素 个 数# 计 算 返 回 的 域 的 个 数func "a", "b", "c";# 只 传 递 "a", 抛 弃 "b" 和 "c"func("a", "b", "c"); # 马 上 生 成 一 个 编 译 器 错 误 !你 已 经 隐 含 地 在 参 数 列 表 前 面 提 供 了 一 个 scalar, 这 的 确 令 人 有 点 吃 惊 . 如 果 @foo 只 包含 一 个 元 素 , 那 么 传 递 给 函 数 不 是 这 个 元 素 , 而 是 1(@foo 的 元 素 个 数 ). 并 且 在 第 二 个例 中 ,split 在 标 量 环 境 中 被 调 用 , 吞 没 你 的 整 个 @_ 参 数 列 表 . 在 第 三 个 例 子 中 , 因 为func 已 经 用 函 数 原 型 定 义 为 一 个 单 目 操 作 符 , 因 此 只 有 "a" 传 递 给 了 func; 然 后 func返 回 值 被 丢 弃 , 因 为 逗 号 操 作 符 的 存 在 因 此 继 续 处 理 下 两 个 元 素 并 返 回 "c". 最 后 一 个 例 子 ,在 编 译 的 时 候 用 户 将 得 到 一 个 语 法 错 误 .如 果 你 想 写 一 个 新 的 代 码 得 到 一 个 只 使 用 一 个 标 量 参 数 的 单 目 操 作 符 , 而 不 是 任 何 旧 的 标 量表 达 式 , 你 可 以 使 用 下 面 的 函 数 原 型 使 它 使 用 标 量 引 用 :sub func (\$) {my $nref = shift;print "you gave me $$nref\n";}现 在 , 编 译 器 可 以 让 下 面 的 例 子 中 , 参 数 以 $ 开 头 的 通 过 :func @foo; # 编 译 器 错 误 , 看 见 了 @, 但 要 的 是 $func split/:/; # 编 译 器 错 误 , 看 见 了 函 数 , 但 要 的 是 $func $s;func $a[3];# 这 个 是 对 的 -- 获 取 了 真 的 $ 符 号# 这 个 也 对195

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

Saved successfully!

Ooh no, something went wrong!