First, it doesn't seem to work correctly. I tried with the expression (+ 1 2 3 (* 4 3 (- 20 1) (% 5 2)) 3 4) and got the answer 2221 when it should be 241.
sub solvepart($);
...
sub reformat;
...
sub reformat($){
...
sub solvepart($){
The declaration for reformat doesn't have a prototype but the definition does even though reformat does not accept any arguments YOU SHOULD NOT USE PROTOTYPES.
if ($given ~~ /(?:exit)|(?:end)|(?:quit)/i){
...
if ($VERBOSE or $VERBOSE ~~ /v(?:erbose)?/i){
Is there any good reason to use the smartmatch operator (~~) instead of the binding operator (=~)? /(?:exit)|(?:end)|(?:quit)/i could be written more simply as /exit|end|quit/i.
my $num=qr/(-?\d++\.?\d*?)/;
...
unshift(@stack, [$2,$3,$4]) while $given =~ s/(.*)\((\S++) ++(-?\d
+++\.?\d*?) ++(-?\d++\.?\d*?)?\)/$1/;
Why define $num if you are not going to use it?
if ($level[0]eq'+'){
$level[2]
?($value=$level[1]+$level[2])
:($value+=$level[1]);
}
elsif ($level[0]eq'-'){
$level[2]
?($value=$level[1]-$level[2])
:($value=$level[1]-$value);
}
elsif ($level[0]eq'/'){
$level[2]
?($value=$level[1]/$level[2])
:($value=$level[1]/$value);
}
elsif ($level[0]eq'*'){
$level[2]
?($value=$level[1]*$level[2])
:($value*=$level[1]);
}
elsif ($level[0]eq'**'or$level[0]eq'^'){
$level[2]
?($value=$level[1]**$level[2])
:($value=$level[1]**$value);
}
elsif ($level[0]eq'%'){
$level[2]
?($value=$level[1] % $level[2])
:($value=$level[1] % $value);
}
Could be written more simply as:
if ($level[0]eq'+'){
$value = $level[1] + $level[2] || $value;
}
elsif ($level[0]eq'-'){
$value = $level[1] - $level[2] || $value;
}
elsif ($level[0]eq'/'){
$value = $level[1] / $level[2] || $value;
}
elsif ($level[0]eq'*'){
$value = $level[1] * $level[2] || $value;
}
elsif ($level[0]eq'**'or$level[0]eq'^'){
$value = $level[1] ** $level[2] || $value;
}
elsif ($level[0]eq'%'){
$value = $level[1] % $level[2] || $value;
}
Update: this is how I would probably do it:
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|