fork download
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Data::Dumper;
  5.  
  6. my $input = $ARGV[0] // "2 * 3 + 4 # and a comment\n";
  7.  
  8. my @tokens;
  9.  
  10. $^R and push @tokens, [$^R, $1] while $^R = undef,
  11. $input =~ /( \#.*$
  12. | \s+
  13. | [+-] (?{'AddOp'})
  14. | [*\/] (?{'MulOp'})
  15. | \d+ (?{'Number'})
  16. | \( (?{'OpenParen'})
  17. | \) (?{'CloseParen'})
  18. | . (?{ die "Syntax error at position $-[0]\n" })
  19. )/gmx;
  20.  
  21. print Dumper \@tokens;
Success #stdin #stdout 0.02s 7292KB
stdin
Standard input is empty
stdout
$VAR1 = [
          [
            'Number',
            '2'
          ],
          [
            'MulOp',
            '*'
          ],
          [
            'Number',
            '3'
          ],
          [
            'AddOp',
            '+'
          ],
          [
            'Number',
            '4'
          ]
        ];