Advertisement
Guest User

Untitled

a guest
Oct 11th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.54 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use strict;
  3.  
  4. my $debug = 1;
  5.  
  6. 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{}}';
  7.  
  8. my $leftBracket  = '\{';        # lewy nawias
  9. my $rightBracket = '\}';        # prawy nawias
  10. my $notBracket   = '[^{}]*';    # na pewno nie { i nie }
  11.  
  12. my $fn = 'bla\(\)';             # początek usuwanej funkcji
  13.  
  14. print STDERR "debug:  start: $pgm\n" if $debug;
  15.  
  16. # a)
  17. while (
  18.     $pgm =~ s/
  19.                                             # To zostanie…
  20.                 ( $fn $leftBracket )            # To jest początek naszej funkcji (1)
  21.                 ( $notBracket $leftBracket )*   # Wchodzimy tak głęboko, jak się da, czyli jedziemy po lewych nawiasach, żeby stanąć przed najbardziej zagnieżdżonym (2)
  22.  
  23.                                             # To będziemy usuwać:
  24.  
  25.                 (                               # Najbardziej zagnieżdzione {} od lewej (3):
  26.  
  27.                    $notBracket                  # jakieś śmieci przed nawiasem {
  28.                    $leftBracket                 # lewy nawias {
  29.                    $notBracket                  # coś, co jest miedzy {…}
  30.                    $rightBracket                # prawy nawias }
  31.                    $notBracket                  # jakieś śmieci za nawiasem
  32.  
  33.                 )
  34.  
  35.             /$1$2/gmx    # zostaje tylko (1) i (2)
  36.  
  37.   )
  38. {
  39.     print STDERR "debug: a) Usunięto '$3',\tzostało '$pgm'\n" if $debug;
  40. }
  41.  
  42. # b)
  43. if ( $pgm =~ s/($fn $leftBracket $rightBracket)//gmx ) {
  44.     print STDERR "debug: b) Usunięto '$1',\tzostało '$pgm'\n" if $debug;
  45. }
  46.  
  47. print STDERR "debug: result: $pgm\n\n" if $debug;
  48.  
  49. print "$pgm\n";
  50.  
  51. =head3 Output
  52.  
  53. 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{}}
  54. 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(){}'
  55. 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(){}'
  56. debug: a) Usunięto '{y}u ',     zostało 'foo(){as{}ee{dd{}}} bla(){{i{o}p}a}  bar(){sd{d}ee{d{d{}}}} bla(){}'
  57. debug: a) Usunięto 'i{o}p',     zostało 'foo(){as{}ee{dd{}}} bla(){{}a}  bar(){sd{d}ee{d{d{}}}} bla(){}'
  58. debug: a) Usunięto '{}a',       zostało 'foo(){as{}ee{dd{}}} bla(){}  bar(){sd{d}ee{d{d{}}}} bla(){}'
  59. debug: b) Usunięto 'bla(){}',   zostało 'foo(){as{}ee{dd{}}}   bar(){sd{d}ee{d{d{}}}} '
  60. debug: result: foo(){as{}ee{dd{}}}   bar(){sd{d}ee{d{d{}}}}
  61.  
  62. foo(){as{}ee{dd{}}}   bar(){sd{d}ee{d{d{}}}}
  63.  
  64. =cut
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement