文档章节

perl入门经典阅读笔记之四:第七章:子程序

苏巴什
 苏巴什
发布于 2013/12/03 17:15
字数 575
阅读 154
收藏 4

明显感觉到译者把这一章是分给两个人在翻译的,原因如下:153页第一段:声明变量,英文原文是: state variable,同样是153页的倒数第三段,闭环,这个字英文版里面是Closure,明显是错误的!后续在166页,把同样的closure翻译成闭包。可以看出,这一章是两个人在做的翻译,而且第一个人的水平明显差很多。。

wantarray,判断子程序如何被调用,如果是标量上下文则返回0,列表上下文返回1.

Carp这个核心模块在Perl高效编程里面有描述。

evalgotchas应该翻译成eval陷阱。。?感觉应该是,这部分Perl高效编程都描述过。

原型,这个在modern perl里面有描述,用于强制指定传入的参数类型:标量,列表还是散列。

<!-- lang: perl -->
sub mylength($) {
    my $arg = shift;
    return‘ARRAY’ eq ref $arg ? 
    scalar @$arg: ‘HASH’ eq ref $arg ? 
    scalar keys %$arg: length $arg;
}
my $scalar = “whee!”;
print mylength($scalar), “\n”;

my @array = ( 1, 18, 9 );
print mylength(@array), “\n”;

my %hash = ( foo => ‘bar’ );
print mylength(%hash), “\n”;

输出结果为 5 1 3,这是因为输入的内容被强制转换为标量上下文:第一个是标量字符串,其中有5个字符,所以输出为5;第二个是数组,表示强制转化为标量上下文时,所以返回的是数组的个数,而不是数组中元素的本身;第三个就比较奇怪了,因为直接输出scalar %hash,得到的结果是1/8,,然后再次对标量上下文求值,所以最终的结果是3.

现在可以用[]的语法封装三个基本数据类型,如[$@%],则得到的结果为所期望的5 3 1.

(。。。。关于原型的占位。。。。)

递归,是调用自身的子程序,但是要避免死循环。比如说裴波那契数列:

<!-- lang: perl -->
sub F{
my $n = shift;
return 0 if $n == 0;
return 1 if $n == 1;
return F($n-1) + F($n-2);
}
print F(7);

得到的结果是13。

另外,还可以使用Memoize模块,生成缓存: <!-- lang: perl --> use Memoize; memoize('F');

sub F{
my $n = shift;
return 0 if $n == 0;
return 1 if $n == 1;
return F($n-1) + F($n-2);
}
print F(50);

这样计算就能迅速很多。

© 著作权归作者所有

共有 人打赏支持
苏巴什
粉丝 3
博文 25
码字总数 5638
作品 0
浦东
程序员
MoreWindows博客目录(微软最有价值专家,原创技术文章152篇)

为了方便大家查找和学习,现将本人博客中所有博客文章列出目录。 一. 白话经典算法 目前有17篇,分为七大排序和经典面试题讲解两大类 1. 《白话经典算法系列之一 冒泡排序的三种实现》 2. 《...

morewindows
2013/12/24
0
0
《代码大全2》学习笔记2

第二部分:创建高质量的代码 第五章:软件构建中的设计 “在大型项目中,设计可能会详细到让编码工作近乎机械化” “在小型项目中,设计可能就是指用伪代码写个类的接口,或者询问旁边的程序...

angel_64
2016/04/25
0
0
MySQL入门很简单-学习笔记 - 索引页

索引一下,方便阅读,后面有完整的PDF下载地址 MySQL入门很简单-学习笔记 - 第1 章 数据库概述 MySQL入门很简单-学习笔记 - 第 2 章 Windows平台下安装与配置MySQL MySQL入门很简单-学习笔...

晨曦之光
2012/03/09
0
0
哪里可以找到 Kali Linux 的教程?

Kali Linux 秘籍 原书:Kali Linux Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目录: 第一章 安装和启动Kali 第二章 定制 Kali Linux 第三章 高级测试环境 第...

wizardforcel0
07/02
0
0
【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航

《ORACLE PL/SQL编程详解》 系列文章目录导航 ——通过知识共享树立个人品牌。 本是成书的,但后来做其他事了,就无偿的贡献出来,被读者夸其目前为止最“实在、经典”的写ORACLE PL/SQL编程...

yonghu86
2012/07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
21分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
23分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
25分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部