perl学习笔记-----------------------(5)

1.如果编译器在调用之前知道此子程序的定义,或者Perl 从语法中能知道这是一个子程序调用,则子程序前的符号&是可以省略的

2.如果Perl 内部的编译器知道此子程序的定义,则可以省掉其参数的括号:
sub division{
$_[0] / $_[1]; #第一个参数除以第二个参数
}
my $quotient = division 355, 113; #可以省略掉括号


3.特别的地方为:如果子程序和Perl 一个内嵌程序同名,则必须使用&来调用它。编译器将在调用
之前检查其定义,而非直接将它当作内嵌的函数来处理。加上&,可以确保你调用了此子程序;不加,则仅当没有同名的内
嵌函数时才能调用到它:
sub chomp {
print “Munch, Munch!\n”;
}
&chomp; #此处的&是必须的


4.规则:除非知道Perl 所有的内嵌函数,否则函数调用时都应当使用&.

5.标量并非子程序返回的唯一类型。如果你在列表context 中调用某个子程序◆,则其会返回列表值。

6.假定想得到某个范围内的数字(如范围操作符),从小到大,或者从大到小。范围操作符只能从小到大,但可以很容易的弥
补这种缺陷:
sub list_from_fred_to_barney {
if($fred < $barney) {
#Count upwards from $fred to $barney
$fred ..$banrey
} else {
#Count downwards from $fred to $barney
reverse $barney ..$fred;
}
$fred = 11;
$barney = 6;
@c = &list_from_fred_to_barney; #@c 为(11,10,9,8,7,6)


4.11 练习
1.[12]写一个名为&total 的子程序,返回一列数字的和。提示:子程序不应当有任何的I/O 操作;它处理调用的参数,返
回处理后的值给调用者。结合下面的程序来练习,它检测此子程序是否正常工作。第一组数组之和我25。
sub total{
my $sum=0;#私有变量
foreach(@_)
{$sum+=$_;}
$sum;
}
my @fred = qw{ 1 3 5 7 9 };
my $fred_total = &total(@fred);
print "The total of \@fred is $fred_total.\n";
print "Enter some numbers on separate lines: ";
my $user_total = &total(<STDIN>);
print "The total of those numbers is $user_total.\n";


2.[5]利用上题的子程序,写一个程序计算从1 到1000 的数字的和
print"The numbers from 1 to 1000 add up to",&total(1..1000),".\n";

3.[18]额外的练习:写一个子程序,名为&above_average,将一列数字作为其参数,返回所有大于平均值的数字(提示:
另外写一个子程序来计算平均值,总和除以数字的个数)。利用下面的程序进行测试:

sub averavge
{
 if(@_==0) {return}
 my $count=@_;
 my $sum=total(@_);
 $sum/$count;
}
sub above_average{
my $average=&average(@_);
my @list;
foreach my $element(@_){
 if($element>$average){
  push @list,$element;
  }
}
@list;
}
my @fred = &above_average(1..10);
print "\@fred is @fred\n";
print "(Should be 6 7 8 9 10)\n";
my @barney = &above_average(100, 1..10);
print "\@barney is @barney\n";
print "(Should be just 100)\n";


4.
while (defined($line = <STDIN>)) 
{
print “I saw $line”;
}


第一行代码值得仔细说明:我们将输入的字符串读入一个变量,检查其是否defined,如果是,则执行while 的循环体

转载于:https://my.oschina.net/u/2291665/blog/884991

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值