Thanks for the reply. To simplify the question and not get off track I need to see if a string contains a variable 'name' not 'value'.
If($string =~ m/\$variable/) { print "Yes \$variable exists"; } $variable = "Hello world"; So if $string contains -> 'HI their I am $variable' it will say "Yes $variable exists" But if string is -> 'hi there ' it will not print that It when I do print $screen; I get "Hi their I am Hello world" so it would seem that it is searching for the string '$variable' in the string "Hi their I am Hello world" which it doesn't exist. Any way to get the regex to look at $string as if I had used singles quotes to give it value? $string = 'HI there I am $variable'; this works but I can't do it this way If not I'll figurte something else out. Thanks Dan +++++++++++ Yeah I know the risks , but it's not just a matter of using a template system. It has nothing to do with a template It's smuch more complicated than that. I'll look into using Safe. There's no way around it as that is the point of this script. Basically it lets someone, usually only me, to enter in perl code that does what it does based on Database info and input. Basically stuff like this if($joemama_DB ne $joemama_input && $joemama_input eq 'needs_scheduled') { &emaillinkto("hey this guy needs scheduled!","[EMAIL PROTECTED]"); } I already have it not executing the code if it contains 'no strict' so that they can't turn off 'use strict 'refs'' and use references as well as some other things that will cause them to be able to use refs and such like qualify_to_ref, etc. There is just one variable that I don't want them to be able to use and but everytime I check for it it is not seeing the variable name it is seeing the variable content. This is a simplified form of what I am trying to do : if($code =~ m/\$password/) { print "NO way pal \n"; } # ie if $code contains the string '$password' then don't do it! else { ... Why not just hard code that in you ask? Because this needs to be very very flexible and do almost anything. Some of the more common tasks I've created subroutines for like emaillinkto, etc.. Basically , besides the security risks -----Original Message----- From: Jenda Krynicky [mailto:[EMAIL PROTECTED]] Sent: Monday, January 13, 2003 5:06 PM To: [EMAIL PROTECTED] Subject: Re: finding variable name in string From: "Dan Muey" <[EMAIL PROTECTED]> > Sorry to bother but... > I have a script that I have to do an eval on code that someone else > has put in a database. ... Are you sure you want to do that? Are you sure you want them to be able to run any code they with inside your script? Deleting files they should not have access to, mailing themselves information they should not see, breaking something ... ? You should be really really really carefull with this! And if you really must allow them to enter CODE into the database then at least use Safe; with the strickest settings that allow you to do what you must. > $code = "$row[1] $row[2] $row[3]"; # @row is from a database query This looks that all you need is to fill in a TEMPLATE, that they do not need to execute (read DO) something, but instead construct some text perusing some variables. If yould be much better to store something like this: This is a notification that the %JobTitle% job posting on %SiteName% will expire in %ExpireInDays% days." in the database. Then fill some hash with the data (from the database and elsewhere) and do: $template =~ s/%(\w+)%/$data{$1}/g; See some more comments below. > so I try to do this : > > if($code =~ m/\$password/) { print "NO way pal \n"; } # ie if $code > contains the string '$password' then don't do it! else { > > eval $code; > ..... > > It seems that since $code = "$row.. uses double quotes it seems that > it is puting the value of $password there instead of the actual string > '$password' Why don't you print the $code somewhere so that you may look at it and see what exactly is there? Stop guessing. Test! Dan : I've done that and what I said before is : > it is puting the value of $password there instead of the actual string > '$password' So if I print $code; And $code is "print $password;" and $password is 'secret' then the results of print code are : print secret; Anyway, if the value of $row[$i] is 'print $password;' then the $code WILL contain 'print $password;'. Dan : It hasn't so far but maybe the print @row will shed some light, The variable interpolation is NOT recursive. But maybe the $row[$i] contains something unexpected. Print out @row as well! Jenda ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]