diff options
| author | Luis Mochan <mochan@fis.unam.mx> | 2021-12-15 11:47:39 -0600 |
|---|---|---|
| committer | Luis Mochan <mochan@fis.unam.mx> | 2021-12-15 11:47:39 -0600 |
| commit | 38ec22341cbc08f974963e5fff54f2f2298174a5 (patch) | |
| tree | 743abf4d0fcccc1af352232117e8faedc4d47f30 | |
| parent | 0a84b8990b9a144bb82f6a8745e8315bbc0cd0fe (diff) | |
| download | perlweeklychallenge-club-38ec22341cbc08f974963e5fff54f2f2298174a5.tar.gz perlweeklychallenge-club-38ec22341cbc08f974963e5fff54f2f2298174a5.tar.bz2 perlweeklychallenge-club-38ec22341cbc08f974963e5fff54f2f2298174a5.zip | |
Add try/catch to survive mistakes and rename variables
| -rwxr-xr-x | challenge-143/wlmb/perl/ch-1.pl | 56 |
1 files changed, 32 insertions, 24 deletions
diff --git a/challenge-143/wlmb/perl/ch-1.pl b/challenge-143/wlmb/perl/ch-1.pl index cc18d4ac91..96c3f72081 100755 --- a/challenge-143/wlmb/perl/ch-1.pl +++ b/challenge-143/wlmb/perl/ch-1.pl @@ -6,33 +6,41 @@ use v5.12; use warnings; use Scalar::Util qw(looks_like_number); +use Try::Tiny; my $original_string; +my $previous; my $current; -my $next; +my $token; foreach (@ARGV){ - my $original_string=$current=$_; - token(); - my $result=expression(); - say "$original_string=$result"; + try { + $original_string=$previous=$current=$_; + token(); + my $result=expression(); + say "$original_string=$result"; + } + catch { + warn $_; + }; } sub token { - $next=[$1,$1], return if $current=~s{^\s*([()*/+-])}{}; # symbol - $next=['N',$1], return + $previous=$current; + $token=[$1,$1], return if $current=~s{^\s*([()*/+-])}{}; # symbol + $token=['N',$1], return if $current=~s{^\s*([^()*/+\-\t\n ]*)}{} and looks_like_number($1); # number? - $next=[undef,undef], return if $current=~/^\s*$/; # nothing - die "Unrecognizable input: $current"; + $token=[undef,undef], return if $current=~/^\s*$/; # nothing + die "Unrecognizable input: $previous\n"; } sub expression { my $result=term(); while(1){ - my $op=$next->[0]; - last unless defined $op && $op=~m{[+-]}; - token(); - $result+=term(),next if $op eq '+'; - $result-=term(),next if $op eq '-'; + my $op=$token->[0]; + last unless defined $op && $op=~m{[+-]}; + token(); + $result+=term(),next if $op eq '+'; + $result-=term(),next if $op eq '-'; } return $result; } @@ -40,24 +48,24 @@ sub expression { sub term { my $result=simple(); while(1){ - my $op=$next->[0]; - last unless defined $op && $op=~m{[*/]}; - token(); - $result*=simple(),next if $op eq '*'; - $result/=simple(),next if $op eq '/'; + my $op=$token->[0]; + last unless defined $op && $op=~m{[*/]}; + token(); + $result*=simple(),next if $op eq '*'; + $result/=simple(),next if $op eq '/'; } return $result; } sub simple { - my $op=$next->[0]; - my $val=$next->[1]; - die "Unrecognized expression: $current" unless defined $op && $op=~/[-(N]/; + my $op=$token->[0]; + my $val=$token->[1]; + die "Unrecognized expression: $previous\n" unless defined $op && $op=~/[-(N]/; token(); return -simple() if $op eq '-'; return $val if $op eq 'N'; my $result=expression(); - $op=$next->[0]; - die "Unbalanced parenthesis: $current" unless defined $op and $op eq ')'; + $op=$token->[0]; + die "Unbalanced parenthesis: $previous\n" unless defined $op and $op eq ')'; token(); return $result; } |
