Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Simple Calculator

by ncw (Friar)
on Jun 29, 2000 at 01:20 UTC ( [id://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;
Replies are listed 'Best First'.
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.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (2)
As of 2024-11-03 02:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    chatterbot is...






    Results (13 votes). Check out past polls.