極悪です。
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/