#!/usr/bin/perl use strict; use warnings; my $when = '(!(C)&T)&!Q'; my %pinValsH = (); my @pinsA = qw (C T Q); foreach my $pin (@pinsA) { $pinValsH{$pin} = 0b1; } &evalLogicExpr($when, \%pinValsH); sub evalLogicExpr { #my $self = shift; my $whenCond = shift; my $pinValsHRef= shift; my $newExpr = $when; $newExpr =~ s/\&+/\&\&/g; $newExpr =~ s/\|+/\|\|/g; foreach my $pin (keys %{$pinValsHRef}) { printf "%s %s %b\n", "NAME ", $pin,$pinValsHRef->{$pin}; if($newExpr =~ /(.*)($pin)(.*)$/) { $newExpr =~ s/(.*)($pin)(.*)$/$1$pinValsHRef->{$pin}$3/g; } } print "EXPR = ",$newExpr,"\n"; printf "%b\n", $newExpr; } #### NAME Q 1 NAME T 1 NAME C 1 EXPR = (!(1)&&1)&&!1 Argument "(!(1)&&1)&&!1" isn't numeric in printf at ./nBool.pl line 26. 0