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{}
}