文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>最近学习到Perl的一些小知识

最近学习到Perl的一些小知识

时间:2010-07-24  来源:zhuyubei

最近又重新用Perl开始做一些文本处理的事情。上个礼拜看了老外写的代码,突然发觉人家写得代码还是很正规和考虑周全的。比如他经常用嵌套数据结构。虽然有的时候散列套散列再套数组再套散列的方式会有些笨重。但是的确是表示复杂数据的好的方式。我这几天写代码的时候也吸收了一点这方面的风格。   比如假设一个物体有4中属性,分别是A,B,C,D。其中A,B,C分别可以用三个值来描述。这时候比较直观的使用方式就是使用散列来描述具有字面方式的属性。  

#创建物体的3个属性及其对应的值得

$object{A} = "v1"; #注意散列裸键的话可以不加引号
$object{B} = "v2";
$object{C} = "v3";

对于选用标量还是数组做散列的值,我觉得应该要做个规划。比如那个老外经常用数组做值,我经常看到[qw( v1) ],之类的代码。我当时觉得用标量不就可以了嘛。但是后面我想到万一一个属性以后还要添加值怎么办。那可能又要大张旗鼓该代码了。果然看到后来程序里一个属性对应了多个值,然后我若有所思。的确在写代码之前要对选用的数据组织方式做一定的规划。

但是假设属性D,里具有多个记录,且记录有先后顺序。而每个记录有分别有对应的记录名字和记录结果。那如果数据结果选得不好的话就会比较复杂了。即使我们在做文本处理的时候,可以一股脑的进行文字解析。但是抽出明确可复用的子例程以及数据结构对于维护的话会更加好。这里我们可以这么处理属性D

对于属性D的多个有顺序记录,我们显然会使用数组。但是散列里的值只能存标量,这里就决定了我们只能使用引用了。

#创建属性D的一个记录组的匿名数组

$all_records = [];
$object{D} = $all_records;

#而对于读到的数据记录,显然我们是要加到数组中去的。而数组中又只允许标量,所以我们又只能使用引用。

#把一条数据记录加到记录组中去
push(@$all_records,[$name,$result]);


如此几层嵌套,我们完成了一个比较可理解和维护的数据结构。我在完成这个程序的时候,的确是感到了嵌套的好处。

另外我还学到了如何获取选项的值。最简单的是直接使用模块Getopt::Long模块.

use Getopt::Long;

#创建选项的值
my($value1,$value2);

#s代表string型选项,n代表数值型选项
Getoptions("option1=s" => \$value1,
            "option2=n" => $value2
);


这样就可以方便快捷的获取选项的值了。
相关阅读 更多 +
排行榜 更多 +
幸存者的命运

幸存者的命运

飞行射击 下载
精英战区3d

精英战区3d

飞行射击 下载
货运猎人

货运猎人

飞行射击 下载