Expanding variables in a string

T

Thind, Aman

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 =3D 'perl =23=7BENV=5B'HOME_SCRIPTS'=5D=7D/myscript.pl =
-=23=7Bparams=5B:date=5D=7D'

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.
 
F

Frantisek ZACEK

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


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.
 
E

Eric I.

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.

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 asan 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 informationis 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 .
 
T

Thind, Aman

Thanks for the reply=21

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

irb(main):002:0> myaction =3D 'perl =
=23=7BENV=5BHOME_SCRIPTS=5D=7D/myscript.pl
-=23=7Bparams=5B:date=5D=7D'
=3D> =22perl =5C=23=7BENV=5BHOME_SCRIPTS=5D=7D/myscript.pl =
-=5C=23=7Bparams=5B:date=5D=7D=22

irb(main):004:0> eval myaction
NameError: undefined local variable or method =60perl' 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.
=20
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

-----Original Message-----
From: Frantisek ZACEK =5Bmailto:czechripper=40gmail.com=5D=20
Sent: Monday, August 11, 2008 1:07 PM
To: ruby-talk ML
Subject: Re: 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=20
assignment.

Eg:

myaction =3D 'perl =23=7BENV=5B'HOME_SCRIPTS'=5D=7D/myscript.pl = -=23=7Bparams=5B:date=5D=7D'

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.



--
Frantisek ZACEK (zacek_f) -- SRS 2008

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - =
- - - - - - -

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.
 
F

Frantisek ZACEK

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

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.
 
H

Heesob Park

2008/8/11 Thind said:
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.
You could try something like this:

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

Regards,

Park Heesob
 
F

Frederick Cheung

2008/8/11 Thind said:
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.
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top