- 论坛徽章:
- 1
|
本帖最后由 flw 于 2013-09-15 12:46 编辑
给你们介绍个好玩的- flw@waker:~$ ./ttt.pl 'a,b,c,d,e,[e1,e2,[e21,e22,e33],e3],f'
- ### $result: [
- ### 'a',
- ### 'b',
- ### 'c',
- ### 'd',
- ### 'e',
- ### [
- ### 'e1',
- ### 'e2',
- ### [
- ### 'e21',
- ### 'e22',
- ### 'e33'
- ### ],
- ### 'e3'
- ### ],
- ### 'f'
- ### ]
- flw@waker:~$ cat ttt.pl
- #!/usr/bin/perl
- use strict;
- use warnings;
- use Smart::Comments;
- use Parse::RecDescent;
- my $parser = new Parse::RecDescent(
- <<'EOD'
- chars: /[^,\[\]]+/
- unit: chars | in_bracket
- in_bracket: '[' unit_list ']' { $return = $item[2] }
- unit_list: unit ',' unit_list { $return = [ $item[1], @{ $item[3] } ] }
- | unit { $return = [ $item[1] ] }
- text: unit_list eos { $return = $item[1] }
- eos: /\Z/
- EOD
- ) or die "compile";
- my $s = shift;
- my $result = $parser->text( $s ) or die "Bad text!\n";
- ### $result
- flw@waker:~$
复制代码 |
|