#!/usr/bin/perl use strict; use warnings; my %vars; while(my $line=) { # Zeile berechnen wenn Rexexp matched my @calc; $line=~s/(\w+)=(\S+)/push(@calc,[$1,$2]); $_="##$#calc##"/eg; # etwas gefunden if(@calc) { for(0..$#calc) { my $k=$calc[$_][0]; my $v=$calc[$_][1]; # es ist ein Berechnung if($v=~/^(?:R|-|\+|\d)/) { # variablen durch konstante ersetzen $v=~s/(R\d+)/$vars{$1}/g; # berechnen $v=eval($v); } # variablenzuweisung $vars{$1}=$v if($k=~/(R\d+)/); # Ersetzung Rückgängig machen $line=~s/##$_##/$k=$v/g; } } # Zeile Ausgeben print $line; } __DATA__ N3070 MSG ( "TEST") N3080 G95 S100 M3 f0.2 N3090 G0 Z200 N3100 X=0 Y=-630 C=DC(0) N3110 M8 N3120 R12=30 N3121 R14=40 N3122 X=R12+R14 N490 R53=800 R52=50 N500 X=R53 Y=-R52-40 N609 R23=100 R53=10 N610 R24=R23/(R53*2)