Expanding variables in a string

Hello,

If I have a string containing variables, how can I expand them?

I retrieve this string from a db so I cannot expand it at the time of
assignment.

Eg:

myaction = ‘perl #{ENV[‘HOME_SCRIPTS’]}/myscript.pl -#{params[:date]}’

I want to be able to do:

system(myaction)

but for this I have to expand the vars inside the script first.

Many Thanks,
Aman



This message is intended only for the personal and confidential use of
the designated recipient(s) named above. If you are not the intended
recipient of this message you are hereby notified that any review,
dissemination, distribution or copying of this message is strictly
prohibited. This communication is for information purposes only and
should not be regarded as an offer to sell or as a solicitation of an
offer to buy any financial product, an official confirmation of any
transaction, or as an official statement of Lehman Brothers. Email
transmission cannot be guaranteed to be secure or error-free.
Therefore, we do not represent that this information is complete or
accurate and it should not be relied upon as such. All information is
subject to change without notice.

On Mon, Aug 11, 2008 at 6:00 AM, Thind, Aman [email protected]
wrote:

I want to be able to do:

system(myaction)

but for this I have to expand the vars inside the script first.

Many Thanks,
Aman

You mean you wish to execute in Ruby code you have in a string ?

If that’s wha you’re looking for then eval is what you want.

On Aug 11, 12:00 am, “Thind, Aman” remove[email protected] wrote:

I want to be able to do:

system(myaction)

but for this I have to expand the vars inside the script first.

Have you tried putting double quotes (rather than single quotes)
around the String in question?

v = “hello”
w = “1. #{v}” # -> 1. hello
x = ‘2. #{v}’ # -> 2. #{v}

This message is intended only for the personal and confidential use of the designated recipient(s) named above. If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers. Email transmission cannot be guaranteed to be secure or error-free. Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such. All information is subject to change without notice.

Given all of that, I can’t help but feel I’ve done something wrong by
daring to answer your question… Please tell the Brothers Lehman
that I didn’t mean to do it. Please understand that when I crossed
the Brother Ringling, I returned home one evening to find a clown’s
nose in my bed, so I’m a little skittish.

Eric

====

Ruby training and Rails training available at http://LearnRuby.com .

On Mon, Aug 11, 2008 at 6:39 AM, Thind, Aman [email protected]
wrote:

NameError: undefined local variable or method `perl’ for main:Object

Thanks,
Aman

Sorry, I misunderstood your problem.

You could try %Q, like this
h = {}
h[‘MY_THING’] = 78 # hash just for the example

myaction = %Q{perl with whaterver you want and also #{h[‘MY_THING’]}}
system myaction

Hope it helps.

2008/8/11 Thind, Aman [email protected]:

NameError: undefined local variable or method `perl’ for main:Object

You could try something like this:

myaction.gsub(/#{(.+?)}/){eval($1)}

Regards,

Park H.

Thanks for the reply!

If I do eval(myaction) then it thinks all the words in the string are
variables and complains:

irb(main):002:0> myaction = ‘perl #{ENV[HOME_SCRIPTS]}/myscript.pl
-#{params[:date]}’
=> “perl #{ENV[HOME_SCRIPTS]}/myscript.pl -#{params[:date]}”

irb(main):004:0> eval myaction
NameError: undefined local variable or method `perl’ for main:Object

What I want is for all the known variables in the string to be expanded;
the same effect that assignment with double quotes has.

Please remember I know using double quotes in the assignment to myaction
would solve the problem but I am doing this assignment only for
illustration.

I actually get the string from a db query so have to expand the
variables after the assignment.

Thanks,
Aman

On 11 Aug 2008, at 06:02, Heesob P. wrote:

irb(main):004:0> eval myaction

I actually get the string from a db query so have to expand the
variables after the assignment.

You could try something like this:

myaction.gsub(/#{(.+?)}/){eval($1)}

Or even
my_interpolated_action = eval “%@#{action.gsub(’@’,’@’)}@”
(lifted from activerecord where something similar is done)

Fred