作者: dune
日時: 2002/6/08(21:30)
極悪です。

Perl の場合、ビジュアルな電卓は
file://C:\usr\Perl600\eg\IEExamples\plcalc.htm 
にありますが、パソコンの画面上に表示すると邪魔なので僕は本物
の関数電卓しか使いません。

ただ数式入力タイプの関数電卓を使っていても、カッコに {} や 
[] が使えないとか、計算しながら文書を入力したいんだけど、電
卓を手にとって数式を入力するのが面倒、ということもあって、融
通の利く自分用のものを perl で作りたいと思うことはあります。

んで、そういうときに使える perl script を作ってみました。
例えば {40ns + 1.3ns + 1.3ns} - {15ns + 3.3ns} という文字列
をクリップボードに入れると、計算して 24.3 に置き換えてくれま
す。

3文字までのアルファベットは削除し、{} や [] は () に変換し
てから計算します。同じ文字列を二回続けてコピーしたときや、数
式でないものは無視します。



--^ clipcalc.pl
#!/usr/local/bin/perl

use strict;
use Win32;
use Win32::Clipboard;

my $CLIP = Win32::Clipboard();
my $prev;

while(1){
    Win32::Sleep(100);
    $CLIP->WaitForChange();

    $_  = $CLIP->GetText();
    print qq($_\n);
    next if $prev eq $_;
    $prev   = $_;
    
    s/^[\t\x20\n]+//;
    s/[\t\x20\n]+$//;

    next if m/[a-zA-Z]{4,}/
            || m/[^\x20-\x7F]/
            || not m/\d/;

    tr/{}[]x/()()*/;
    tr/a-zA-Z\t\x20\n//d;
    my $ans = eval $_;
    if($ans eq ($ans + 0)){
        $CLIP->Set($ans);
#       $CLIP->Set("$prev = $ans");
        print qq(    $_ = $ans\n);
    }
}

__END__
--$
-- 
FZH01112@..., http://homepage1.nifty.com/dune/