Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^2: How to evaluate a mathematical formula that is stored in another file?

by skooma (Novice)
on Mar 22, 2018 at 10:06 UTC ( #1211499=note: print w/replies, xml ) Need Help??


in reply to Re: How to evaluate a mathematical formula that is stored in another file?
in thread How to evaluate a mathematical formula that is stored in another file?

Thanks your code greatly helped me to get part of my results. But can you explain these two lines below? Thanks.

while ($formula =~ s|([a-z]+)|$data{$1}//' '|e) { push @error, $1 unless exists $data{$1};
  • Comment on Re^2: How to evaluate a mathematical formula that is stored in another file?
  • Download Code

Replies are listed 'Best First'.
Re^3: How to evaluate a mathematical formula that is stored in another file?
by hdb (Monsignor) on Mar 22, 2018 at 11:39 UTC

    In my simplistic example code I assumed that a variable name consists of lower case letters. The regular expression ([a-z]+) finds any consecutive sequence of (at least one) lower case letters. It is then replaced by $data{$1}//' ' where $1 stands for the found sequence. $data{$1} is the value assigned to that sequence ie the variable name. If it does not exist in the hash %data the expression //' ' ensures that a blank is used instead (also makes sure that no warning is issued).

    I have used s||| instead of the more common s/// to avoid confusion on the // operator.

    In the push statement I store the found sequence as in $1 in the array @error if %data did not contain a value for the variable. This is some kind of crude error handling and I can list the names of variables without values further below in the code.

    Again, this is only a simplistic example, and not the only way to look at your requirements. The evil eval is still not fully defused and one could create havoc with mischievous inputs in the values or formulae provided.

      Thanks.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (3)
As of 2022-07-04 02:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?