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里的一些内置数组进行说明一下吧。
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祝您身体健康,工作顺行啊!我先闪人啦!
相关文章推荐
- 【经验总结】服务器端编程部分概念理解
- Php部分常见问题总结
- IO模式设置网络编程常见问题总结—IO模式设置,阻塞与非阻塞的比较,recv参数对性能的影响—O_NONBLOCK(open使用)、IPC_NOWAIT(msgrcv)、MSG_DONTWAIT(re
- C语言编程容易混淆的几个问题总结
- 网络编程常见问题总结 3
- 视频验收部分问题总结
- C/C++ 32位机器和64位机器 差异问题总结 跨平台 移植问题 语言编程需要注意的64位和32机器的区别
- Php部分常见问题总结第1/2页
- 最近问题总结(部分问题还未总结完)
- qt学习笔记(四) qt编程时遇到的问题的总结
- C/C++编程相关问题总结
- Php部分常见问题总结
- Java编程热门问题总结——基础语法篇
- 多线程编程部分总结
- dwr中的部分问题和总结
- scala spark编程常见问题总结
- 2010/7/1网络编程常见问题总结
- ssh编程问题总结
- 项目编程中期的一些问题总结
- 数据库相关问题的部分总结