Fucking traitorous scum

  • nik9000@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    2 days ago

    I genuinely love the idea of the $1 after a match. It feels so natural in perl! So many things are text matching.

    But! But! But!! Those $ variables are dynamic scoped! If you call a method and it matches stuff you lose the variables!

    I’ll bet there is a way around it. But it made me so sad.

    • raspberriesareyummy@lemmy.world
      link
      fedilink
      arrow-up
      1
      ·
      1 day ago

      Yes, regex handling in Perl is the smoothest I have ever seen, and it matched the first description I heard of perl as “the best tool for text processing”. I have done big things with that.

      Those $ variables are dynamic scoped! If you call a method and it matches stuff you lose the variables!

      My match scopes typically looked like so:

      if ($inString =~ /^([ \t]+)(.*)$/) {
          my $indent = $1;    # store first match
          my $remainder = $2; # store second match
          
          # do stuff
      }
      

      (not tested, just edited by hand to anonymise)

      • nik9000@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        1 day ago

        I think it came up more like

        if ($inString =~ /^([ \t]+)(.*)$/ && has_a_cow($2)) {
        

        For me. I dunno. I was never good at perl. I just wanted to hack something together.

        • raspberriesareyummy@lemmy.world
          link
          fedilink
          arrow-up
          1
          ·
          1 day ago

          I did bigger parsing tools in perl, so I often matched a lot of expressions and needed them all in variables. Not only to save the $N variables, but also for code readability, I would then store the matches in proper variable names