Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- use strict;
- my $debug = 1;
- my $pgm = 'foo(){as{}ee{dd{}}} bla(){q{w{e}r}t {y}u {i{o}p}a} bar(){sd{d}ee{d{d{}}}} bla(){a{}}';
- my $leftBracket = '\{'; # lewy nawias
- my $rightBracket = '\}'; # prawy nawias
- my $notBracket = '[^{}]*'; # na pewno nie { i nie }
- my $fn = 'bla\(\)'; # początek usuwanej funkcji
- print STDERR "debug: start: $pgm\n" if $debug;
- # a)
- while (
- $pgm =~ s/
- # To zostanie…
- ( $fn $leftBracket ) # To jest początek naszej funkcji (1)
- ( $notBracket $leftBracket )* # Wchodzimy tak głęboko, jak się da, czyli jedziemy po lewych nawiasach, żeby stanąć przed najbardziej zagnieżdżonym (2)
- # To będziemy usuwać:
- ( # Najbardziej zagnieżdzione {} od lewej (3):
- $notBracket # jakieś śmieci przed nawiasem {
- $leftBracket # lewy nawias {
- $notBracket # coś, co jest miedzy {…}
- $rightBracket # prawy nawias }
- $notBracket # jakieś śmieci za nawiasem
- )
- /$1$2/gmx # zostaje tylko (1) i (2)
- )
- {
- print STDERR "debug: a) Usunięto '$3',\tzostało '$pgm'\n" if $debug;
- }
- # b)
- if ( $pgm =~ s/($fn $leftBracket $rightBracket)//gmx ) {
- print STDERR "debug: b) Usunięto '$1',\tzostało '$pgm'\n" if $debug;
- }
- print STDERR "debug: result: $pgm\n\n" if $debug;
- print "$pgm\n";
- =head3 Output
- debug: start: foo(){as{}ee{dd{}}} bla(){q{w{e}r}t {y}u {i{o}p}a} bar(){sd{d}ee{d{d{}}}} bla(){a{}}
- debug: a) Usunięto 'a{}', zostało 'foo(){as{}ee{dd{}}} bla(){q{}t {y}u {i{o}p}a} bar(){sd{d}ee{d{d{}}}} bla(){}'
- debug: a) Usunięto 'q{}t ', zostało 'foo(){as{}ee{dd{}}} bla(){{y}u {i{o}p}a} bar(){sd{d}ee{d{d{}}}} bla(){}'
- debug: a) Usunięto '{y}u ', zostało 'foo(){as{}ee{dd{}}} bla(){{i{o}p}a} bar(){sd{d}ee{d{d{}}}} bla(){}'
- debug: a) Usunięto 'i{o}p', zostało 'foo(){as{}ee{dd{}}} bla(){{}a} bar(){sd{d}ee{d{d{}}}} bla(){}'
- debug: a) Usunięto '{}a', zostało 'foo(){as{}ee{dd{}}} bla(){} bar(){sd{d}ee{d{d{}}}} bla(){}'
- debug: b) Usunięto 'bla(){}', zostało 'foo(){as{}ee{dd{}}} bar(){sd{d}ee{d{d{}}}} '
- debug: result: foo(){as{}ee{dd{}}} bar(){sd{d}ee{d{d{}}}}
- foo(){as{}ee{dd{}}} bar(){sd{d}ee{d{d{}}}}
- =cut
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement