您的位置:首页 > 编程语言

perl编程的部分问题总结

2013-02-05 00:00 162 查看
最近一直在做perl项目,苦苦钻研了四天就开始perl编码,对首次编写perl程序来说确实遇到了一些很大的问题,诸如子程序中hashmap及数组的转递,参数的调用啊,及一些Demical性质的数据处理啊,int的舍入误差啊,句柄设置等等问题。那么对于这些问题,小刘小T做一下小小的总结吧!

一 对于perl里的一些内置数组进行说明一下吧。

l $_是一些如sub子过程,while,foreach,等等一些内置的变量参数数组:

sub myprogram{

my $data=$_[0];

}

调用的时候:& myprogram(“1”),此时1被传入到$_[0]中,

对于while循环,while(@array){

my $var=$_;#@array 中的每个元素被传入$_中,在循环中做处理。

2 @ARGV是指对于调用子过程时的属性参数:

& myprogram(“1”) xiaoliu xiaoT;

这里的AVGE[1]= “xiaoliu” ;$ARGV[2]= “xiaoT”;记住$ARGV[0]永远是子过程的名即” myprogram” 。

3 在perl和java中int都没有遵循四舍五入的规则,则我们在处理的时候就要注意+0.5或者-0.5的处理。这是解决round在perl中利用int解决的办法。

3ff0
4 对于java中的Demical类,是处理数据超过16位或者更多位的计算的类型,在perl中一样在常规下只有对16位进行有效的计算和有效的表示,超过则以科学计数法来显示。在perl中有2种方法解决此类问题,1是利用perl官网提供的math模块,利用 use BigInt,use Float;等等(详细用法请以官网提供模块为准),2是可以不管三七二十一,利用use bignum;这个代码来处理,只需在编写的开头写上,则说明本perl代码中全部运用bignum类型变量,但是这对内存来说是件很伤头脑的时,利用math模块可以单独指向特修变量。

5 对于数组及hashmap在子模块中的传递是件很伤头脑的事,因为你要知道perl中的所有变量都是根据上下文来编译的,在传入变量键入sub子过程中$_[n]不会轻易指向或者代替你本意的数组和map的地址,其中一些内部机制,小T在这就不细讲了,说一下解决的办法吧。对于数组及map作为参数传递来说,不得不提到引用,而引用符号是\,这个就相当于C++/C语言的指针,可以理解是引向数组或者引向map,既然有引向,就会有还原,则在perl中还原是在引用后的变量上加上变量类型自己本来的符号。

@list=("liukang","good");

sub test{

my $list=$_[0];

my $separator=$_[1];

my @arrays;

my $builder="";

@arrays=@$list;

foreach(@arrays){

$builder.=$_;

if($_ ne $arrays[$#arrays]) {#判斷是不是最後一個數組元素

$builder.=$separator;

}

}

return $builder;

}

$data=&test(\@list ," ");

print $data;

以上就是小T在perl编码部分的知识点总结,如果您有什么不同点,或者更好的解决办法可以随时和我联系啊,热泪欢迎那些关于perl更深层次的问题讨论。最后祝大家2013年新年快乐,小T祝您身体健康,工作顺行啊!我先闪人啦!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  perl