- 论坛徽章:
- 7
|
本帖最后由 rubyish 于 2013-12-23 03:05 编辑
biru:- #!/usr/bin/perl
- sub Or { @_ }
- sub In {
- map join( '_', split /\|/ ),
- glob '{' . join( '}{', map join( '|,', @$_ ) . '|', @_ ) . '}';
- }
- sub Which { shift eq 'or' }
- sub From {
- map { s/(\w+)/'$1',/g; s/\(/[/g; s/\)/],/g; eval } shift
- }
- sub Extract {
- my ( $Operator, @Operand ) = @{ +shift }[ 1, 0, 2 ];
- Which($Operator) ?
- Or map { ref $_ ? Extract($_) : $_ } @Operand :
- In map { ref $_ ? [ Extract($_) ] : [$_] } @Operand
- }
- my $String = <DATA>;
- my @Result = Extract From $String;
- print $_ . $/ for @Result;
- __DATA__
- (A interact ((B or C) or (((D inside E) or F) inside G)))
复制代码 |
|