Perl基本及常用习题教程

基本数据类型

perl 中注释为#

#!/usr/bin/perl //脚本开头声明

$a=123;
$b="Hello world";

@x = (1,2,3,5);  //数组
$c=@x;
$d=$#x;

print "$a\n";
print "$b\n";
print "$c\n";  //代码中数量个数
print"$d\n"; //最后一个数的下角标,此例中有0~3个数,即输出因为3
pirnt"$x[3]\n"; //数组中某位数值

输出结果

关联数组(hash数组)

%array=(key1,values,key2,value2,key3,value3)

key值与value值是绑定的,单是hash中的一组一组的值是没有顺序的
在这里插入图片描述
返回所有键值到一个数组:
@names=keys(%array)
返回所有value值到一个数组:
@value=values(%array)
删除键值及所带value:
delete$array{key}
添加键值进入hash:
$array{‘key4’}=’'value4
返回由一个键值和一个value对构成的两个元素的表,对同一数组再操作时返回下一对值直至结束:
echo(%array)

正则表达式

// An highlighted block
#!/usr/bin/perl

$_="He is my friend";
s/friend/father/g; //s替换 默认与_缺省相连 (将friend替换成brother)
$a="He is my friend, (he is also 28)";
$a=~s/friend/brother/g; //对特定的变量进行替换
$a=~m/\((.*)\); //匹配并提取出括号中的数的放在$1中

print "$_\n";
print "$a\n";
print "$1\n";

习题

1.写一个程序,将一些字符串(不同行)读入一个列表中,逆向输出它。如果是从键盘输入,那在Unix中ctrl+D 结束输入,windows中ctrl+Z结束输入。

#!/usr/bin/perl

chomp @IN=<STDIN>//chomp 每个字符后面的换行符

@rev_in=reverse(@IN);
print "@rev_in\n";

在这里插入图片描述
2.写一个子程序,名为&above_average, 将一列数字作为其参数,返回所有大于平均值的数字(提示;另外写一个子程序来计算平均值,总和除以数字的个数)。利用下面的程序进行测试:

#!\usr\bin\perl -w //-w 如果语法有错会报warming
use strict; //严格执行语法检查
// my 定义局部变量时严格声明变量。& 代表引用子程序。
my @fred = &above_average(1..10); 
print "\@fred is @fred\n";//转义符 输出 @fred
print "(Should be 6 7 8 9 10)\n"


//子程序定义
sub above_average{
	//将输入的数放到数组in中
	my @in=@_;
	my $average_value=&average(@in);
	my @out;
	//对输入的数进行循环,每次循环将in中的数放到$_中
	foreach(@in){
		if($_>$average_value){push @out,$_;}//
	}
	return @out;
}
sub average{
	my @in=@_;
	my $sum=0;
	foreach(@in)
	{
		$sum+=$_;
	}
	$sum=$sum/@in;
	return $sum;
}

3.写一个程序,要求用户在不同的行中输入一些字符串,将此字符串打印出来,规则是:每一条占20个字符宽度,右对齐。为了确保正确的输出,在开头打印出一串数字作为比较(帮助调试)。注意,不要犯19个字符宽度的错误。例如,如果输入,hello,good-bye,则输出为:
hello
good-bye

#!/usr/bin/perl -w
use strict;
//unless 与 if 相反 如果不成立则执行
unless(@ARGV){
	die "<input file> <length of line> <output file>\n";
}
my $length=$ARGV[1];
open(IN,"<$ARGV[0]") or die;
open(OUT,">$ARGV[2]") or die;
my $cnt=1;
foreach(1..$length){
	print OUT "$cnt";
	$cnt++;
	if($cnt==10){$cnt=0;}
}
print OUT "\n";
while(<IN>){
	chomp;
	my $len=length($_);
	if($len>=$length){print OUT "$_\n";}
	else{}
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值