Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Simple Calculator

by ncw (Friar)
on Jun 29, 2000 at 01:20 UTC ( #20260=sourcecode: print w/ replies, xml ) Need Help??

Category: Utility Scripts
Author/Contact Info ncw Nick Craig-Wood
Description: A simple perl calculator for use on the command line. See code for instructions.
#!/usr/bin/perl -w
#
# Nick's simple calculator by Nick Craig-Wood <ncw@axis.demon.co.uk>
#
# I usually call this program = 
#
# You can use it with command line arguments, eg
#   = 2 + 2
#   = 230.4e3 x 60 x 60 x 24 / 8 / 1024 / 1024 / 1024
# ( Note that 'x' is translated to '*' on the command line to avoid sh
+ell
# annoyances )
#
# You can also run it with no arguments in which case it will run a
# calculator shell.  It will give you a bit of help when you run it.
#
#   =
#   Welcome to Nick's Simple calculator
#   Last item is $l, answers stored in $a[..], $n is last entry
#   > 2
#   $a[0]= 2
#   > ($l+2/$l)/2
#   $a[1]= 1.5
#   > ($l+2/$l)/2
#   $a[2]= 1.41666666666667
#   > ($l+2/$l)/2
#   $a[3]= 1.41421568627451
#
# You can type any valid perl you like.
#
# It uses Term::Readline so you can press up arrow to get your
# previous calculation back
#
# Note: it deliberately doesn't 'use strict' to make it a friendlier
# calculator ;-)

use Term::ReadLine;
$args = scalar(@ARGV);

$ENV{"PERL_RL"}="Gnu";

if ($args)
{
    $sum = join(" ", @ARGV);
    $sum =~ s/x/*/g;
    print "$sum = ", eval($sum), "\n";
    die "Error: $@\n" if $@;
    exit;
}

$term = new Term::ReadLine('=');
print "Welcome to Nick's Simple calculator\n";
print "Last item is \$l, answers stored in \$a[..], \$n is last entry\
+n";
while (defined ($_ = $term->readline("> ")))
{
    chomp;
    push @a, eval($_);
    print "Error: $@" if $@;
    $n = @a-1;
    $l = $a[$n];
    print "\$a[$n]= ", $l, "\n" if defined $l;
}

print "quit\n";
exit;

Comment on Simple Calculator
Download Code
RE: Simple Calculator
by cwest (Friar) on Jun 29, 2000 at 18:12 UTC
    That's pretty cool, here's a simple calculator too ;-)
    #!/usr/local/bin/perl -w
    use strict; $|++; print "> ";
    print eval, "\n> " while chomp( $_ = <STDIN> );
    
    Enjoy!
    --
    Casey
    
      This can be done in a one-liner:
      perl -ple '$_ = "> " . eval'
      which you can add to your .bashrc file using:
      alias calc='perl -ple '\''$_ = "> " . eval'\'''
      You can exit the loop with ^D.

      Remember: There's always one more bug.
Re: Simple Calculator
by PhilHibbs (Hermit) on Aug 16, 2004 at 13:28 UTC
    Here's one that takes its input from, and writes the results to, the Windows clipboard. It will process multiple lines independently, and will transform this:
    49.99*1.175
    (49.99*1.175)*5
    into this:
    49.99*1.175 =	58.73825
    (49.99*1.175)*5 =	293.69125
    If you change the lines, copy them, and recalculate, then it will ignore anything after the = signs.

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://20260]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (12)
As of 2014-12-27 21:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (177 votes), past polls