Perl 数列返回所有大于平均值的数字(0 位领导批示)

接上篇的另一道练习

题目要求:
写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字。


#求平均数
sub average_num
{
	$total;
	foreach $tot (@_)
	{
		$total += $tot;
	}
	return int($total/scalar(@_));
}

#返回大于平均数的数
sub above_average
{
	my $average_num = &average_num(@_);
	my @big_average;
	foreach $ave (@_)
	{
		if($ave > $average_num)
		{
			push(@big_average,$ave);
		}
	}
	return @big_average;
}

my @fred = (1..60);
@array = above_average(@fred);
foreach $view (@array)
{
	print $view."\n";
}

与php的很大不同是子程序参数的使用.@_为传递的默认数组.

NOTE:一般子程序都不用标明返回值.也就是不用写明return..原因是perl语言的发明者不想多打七个字母.-_-!!! 我这里标明也是作为一个php程序员的习惯..

Perl 求从1到一个自然数的和(0 位领导批示)

这是小骆驼书上第四章<子程序>的练习题之一.要求用子程序写出..

我做出了两种方法:

1.常规解法.


sub total
{
	$total;
	foreach $tot (@_) {
		$total += $tot;
	}
	return $total;
}

my @fred = 1..10000;
my $fred_total = &total(@fred);

print $fred_total;

数组循环相加..效率很差-_-!

2.等差数列


sub totalnum
{
	$total = (((1+$_[0])*$_[0])/2);
	return $total;
}

print &totalnum(10000);

NOTE: 和等于 1 加上 最大数 然后乘以最大数 最后除 2

我这里是求出1到10000的和.第2种方法明显优于第1种

Perl学习之列表和数组(0 位领导批示)

如果把标量认为是Perl中的单数的话,那列表(list)和数组则可认为是Perl中的复数。

列表是标量的有序集。数组是包含列表的变量。在Perl 中这个两个术语是可以互换的。但严格意义上讲,列表是指数据,而数组是其变量名。可以有一些值(列表)但不属于数组;但每一个数组标量都有一个列表,虽然其可以为空。

列表中每一个元素都是一个独立的标量值。这些值是有顺序的,也就是说,这些值从开头到最后一个元素有一个固定的序列。数组或者列表中的元素是编了号的,其索引从整数0开始,依次增一,因此数组或者列表第一个元素的索引为0。

由于每一个元素是一个独立的标量值,因此一个列表或者数组可以包含数字,字符串,undef 值,或者任意不同类型的标量值的组合。然而,这些元素的类型通常是一致的。

列表和数组可以包含任意数量的元素。最少含有0元素,最多可以填满你的可用内存。这里又体现了Perl 的设计哲学,“没有不必要的限制”。

1.访问数组元素
于Perl 可以通过索引值来访问元素,如:$array[0] = “test”;print $array[0];

数组名字和标量是属于完全不同的命名空间(namespace)。同一程序也可以同时包含叫做$array的标量变量。Perl将它们当作完全不同的事物来看待,不会混淆。(不建议这么做,容易弄混)

2.特殊的数组索引
如果将一个元素存储在数组最后元素的后面的位置,数组会自动增长的。Perl 没有长度的限制,只要你有足够的内存。如果Perl需要创建元素,则其值为undef。

有时需要知道数组最后一个元素的索引。如 array 数组,其最后一个元素的索引为$#array

一种简便方法:数组的负数索引值从最后一个元素开始。但不要认为这些索引是循环的。如果数组有3 元素,那有效的负数索引值是-1(最后一个元素),-2(中间的元素),-3(第一个元素)。实际上,几乎没有人使用除了-1之外的其它的负数索引值。

全文阅读 »

Perl学习之标量变量(0 位领导批示)

变量是保存一个或多个值的容器。变量的名字在整个程序中保持不变,但其包含的值可以变化。

Perl有三种变量:标量,数组,哈希(hash,又称关联数组)。

分别用不同的前缀表示:标量($),数组(@),哈希(%)。

标量变量可以存放一个标量值。标量变量的名字由一个美圆符号($)后接Perl标识符:由字母或下划线开头,后接字母,数字,或者下划线。或者说由字母,数字和下划线组成,但不能由数字开头。大小写是严格区分的:变量$Fred和变量$fred是不同的。任意字母,数字,下划线都有意义。

1.选择好的变量名。
大多数Perl程序中的变量都是小写的。在少数情况下,使用大写字母。所有字母均大写(如$ARGV)通常表明这个变量有特殊的地方。

2.标量赋值
Perl中的赋值符是等号,将等号右边的值赋给等号左边的变量。

3.二元赋值操作符
像$fred=$fred+3(同一个变量在赋值符两边出现)这样的表达式在Perl 中经常出现(同C 和Java 类似),因此Perl 提供了一种简便的替代方法:二元赋值操作符。
如:$fred=$fred+3 和 $fred+=3 是等价的
几乎每一个二元操作符都有一个等价的二元赋值形式:由这个符号后接等号组成。

Perl学习之标量数据(0 位领导批示)

标量是Perl 中最简单的数据类型。大多数的标量是数字或者字符串。你也许把数字和字符串看作不同的事物,但Perl 几乎以相同的观点来看待它们。

标量数据可有操作符(如相加和串联),通常会产生一个新的标量数据。标量数据的值可以存放在标量变量中。标量可以从文件或设备读取,也可以写进去。

一 数字

1.浮点数
数字符号(literal)是Perl程序源代码中代替某个值的方法。数字符号不是计算或I/O操作的结果,它是直接写进代码中的数据。你可能已经很熟悉Perl 的浮点数。有或没有小数点的数字都是允许的(包括+或-号),也可带一个十进制的指数(符号为E)

2.整数

3.非十进制整数
同许多其它语言一样,Perl 也允许使用非10为底的数字。八进制以0开头,十六进制以0x开头,二进制0b开头。在十六进制中A到F(或者a 到f)分别表示10到15。
当一个非十进制的数字超过4位时,读起来将很困难,Perl 允许你使用下划线来区分。

全文阅读 »

Perl学习之例程(子程序)(1 位领导批示)

例程 Subroutine 类似vbscript 中的子例程..在perl里也叫做函数(function),是结构化程序设计的基础。它接受多个输入参数,返回一个输出参数。

之所以说类似vbscript,就是定义时的语法几乎完全一样


sub subroutine_name(){...}

一个简单的例子:


use strict;#严格声明..加了这个之后使用变量之前必须声明.如:my $fs;
use warnings;
use Win32::OLE; #加载WIN32::OLE模块

sub getPath($)
{
my $wawa = shift;#shift是用来替换传递的例程参数
my $fs = Win32::OLE->new("Scripting.FileSystemObject");
my $folder = $fs->GetFolder(".");
my $ls_path = $folder->path;
return $wawa.$ls_path;
}

my $path = getPath('当前路径:');

print $path;

打印出当前文件所在的绝对路径..

Win32::OLE 是perl中实现对OLE对象的支持的模块.

有趣的Perl(0 位领导批示)

最近修改一个站点.用Perl语言写的..

从没碰过..有点犯晕.不过PHP最早就是Perl的一个扩展.语法上十分类似.
就硬着头皮上了.

一打开pl文件就犯了眼晕..
光变量前缀就有三种.

$还是很熟悉的嘛..但在Perl里却只能做为标量变量的前缀

还有一个@与%,分别是数组与哈希数组的前缀

老把@当做抑错符.PHP的习惯还是改不了..

继续学习中…

另:查到Perl的两个全称

Practical Extractoin and Report Language 实用抽取和报表语言

Pathologically Electric Rubbish Lister 变态电子垃圾制造者 (哈哈)

Tags : ,

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志