写在前面
这是Perl的终结篇。原本是想从工作环境中拿出一个perl脚本,line by line地做注释。但是挑来挑去,并没有找到一个好的example code。
不如这样
根据perl在我日常工作中的使用情况,人为地编造一个实战文本处理题,然后对应写出一个perl脚本,comment line by line。
首先,YAML格式
- 这是一个nv内部特常用的“数据存储”格式。百度百科的解释是:
YAML(/ˈjæməl/,尾音类似 camel骆驼)是一个可读性高,用来表达数据序列化的格式。
- 不太清楚其他公司的使用情况,它有点类似xml的思路(树状层级结构),可读性比xml强一些,各有所长吧。
- 常见的YAML格式如下:
partitioning: # 可以在任意行使用注释
GPA_F0:
bbox:
- bbox_gpa_f0 #这是一个数组元素#1
- NV_GPA_F0_bbox # 数组元素#2
chip_partition: gpaf0lts0,gpaf0lts1,gpaf0lts2,gpaf0lts3
clkstartpoint_name_mapping: ''
然后,我们要拿YAML做什么
- 任何YAML数据,都可以在Perl中被转化为hash数据结构,比如上面的example,可以变成如下的hash数据 (抱歉,下面代码手机观看不太友好):
$hash = {
'partitioning' => {
'GPA_F0' => {
'bbox' => ['bbox_gpa_f0' , 'NV_GPA_F0_bbox'],
'chip_partition' => 'gpaf0lts0,gpaf0lts1,gpaf0lts2,gpaf0lts3',
'clkstartpoint_name_mapping' => ''
}
}
};
怎么从 YAML 转到 Hash 数据结构
- 实际代码中,可以使用CPAN的YAML函数库,即可完成这种转换(双向)。
- Example:
$hash = YAML::LoadFile ('input_file_name.yml'); # 读入
YAML::DumpFile ($hash , 'output_file_name.yml') # 写出
- 但是!我们这次,要用Perl code来实现它!
鉴于我coding能力的上限不高,我要增加一些限制
- 缩进:
- level#1 = 0 space (白空格)
- level#2 = 3 space
- level#3 = 5 space (以此类推)
- 实际YAML的规范中,对同一level的缩进值无要求,只需要全局都一样即可。
- 有限的error handler
- 完成Load和Dump的功能
代码我会在06/15结束前贴在本文末尾
- 抱歉,临近milestone业余时间不多
- 百度网盘的形式下载,做出line by line的全注释。
- 我尽可能地cover所有perl常见代码套路。那么,这份代码即可变成各位同学未来的“词典代码”(随用随copy)