Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Dynamic variables and strict

by varian (Chaplain)
on May 03, 2007 at 06:24 UTC ( [id://613317]=note: print w/replies, xml ) Need Help??


in reply to Dynamic variables and strict

I would much agree on the remarks made by other monks, to use a hash for your config vars is a much cleaner and safer approach.

Having said that, your idea of using an eval can work as per below example. Just keep in mind that:

  • eval runs as a nested block, therefore any variables declared within eval are lost once eval is done. Hence you you need to declare your variables before using them in the eval.
  • make sure that your eval cannot be abused thru evil data in a configfile. So check all input before you use it in eval, make sure to single-quote string so that they do not get interpreted, etc etc.
#!/usr/bin/perl use warnings; use strict; my @accepted_vars = qw( myvar1 myvar2 ); my $myvar1; # must declare variable beforehand! my $myvar2; my @lines = <DATA>; chomp @lines; foreach (@lines) { if ( /^\s*(.*?)\s*=\s*(.*)/ && grep $1 eq $_ , @accepted_vars ) { eval '$'."$1 = '$2'"; warn "eval failed: $@\n" if $@; } else { warn "Illegal config var '$1'\n"; } } print "myvar1 = '$myvar1'\n", "myvar2 = '$myvar2'\n"; __DATA__ myvar1 = foo myvar2 = bar evil_var = foo
Output from program is:
Illegal config var 'evil_var' myvar1 = 'foo' myvar2 = 'bar'

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (6)
As of 2024-03-29 09:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found