"subst"

Mi manca una cosa da Tcl - quando ho una stringa “$foo bar”, posso fare

set foo “blah”
set result [subst $str]

e result == “blah bar”

Non trovo un metodo interpolate per le stringhe in Ruby… c’e` un
modo di fare questa cosa?

On Wed, 26 Sep 2007 17:36:25 +0200
“David W.” [email protected] wrote:

Mi manca una cosa da Tcl - quando ho una stringa “$foo bar”, posso fare

set foo “blah”
set result [subst $str]

e result == “blah bar”

Non trovo un metodo interpolate per le stringhe in Ruby… c’e` un
modo di fare questa cosa?

forse puoi usare eval?

str = ‘#{foo} bar’
foo = ‘blah’
eval(“result = str”)


Aequam memento rebus in arduis servare mentem…

Mauro T. http://www.tortonesi.com

University of Ferrara - Dept. of Eng. http://www.ing.unife.it
GNU Wget - HTTP/FTP file retrieval tool
Wget - GNU Project - Free Software Foundation
Deep Space 6 - IPv6 for Linux http://www.deepspace6.net
Ferrara Linux User Group http://www.ferrara.linux.it

— Mauro T. [email protected] wrote:

Non trovo un metodo interpolate per le stringhe in
Ruby… c’e` un
modo di fare questa cosa?

forse puoi usare eval?

str = ‘#{foo} bar’
foo = ‘blah’
eval(“result = str”)

io usavo il trucco analogo:
result = eval(%{“#{str}”})
che necessita del %{} per contenere la stringa e delle
virgolette perché sia trattata come literal da eval.

Certo che un String#interpolate(binding,&block)
farebbe comodo, chi scrive una RCR? :slight_smile:

  ___________________________________________________________

Want ideas for reducing your carbon footprint? Visit Yahoo! For Good
http://uk.promotions.yahoo.com/forgood/environment.html

Ciao tutti,

presento mi a questa lista - e scusate i miei problemi con l’Italiano,
perché non è la mia lingua prima :-}

Comunque, per il problema di “subst”:

Io direi di usare il metodo String#sub (o String#sub!), per esempio:

str = “hello #foo#”
str.sub(/#foo#/, “bar”)

“hello bar”

Esiste anche una versione di sub con un block. Il primo parametro e una
regexp, ma è semplice per questi casi.

La soluzione con eval()

result = eval(%{“#{str}”})

… sta funzionando, ma per me non sembra ottimale riguardo a sicurezza.
Per esempio:

str = ‘#{evil_command()}’
eval(%{“#{str}”}) # Uh-oh…

Quel e un problema con eval() in generale, perché può svolgere comandi
casuali.

Ciao,
Daniel


Daniel H.
[email protected]
Net7 http://www.netseven.it/

Discovery Project

Bring Rails to Italy!
http://www.railstoitaly.org/

— Daniel H. [email protected] wrote:

Ciao tutti,

presento mi a questa lista - e scusate i miei
problemi con l’Italiano,
perché non è la mia lingua prima :-}

non è per niente male, tranquillo :slight_smile:

Comunque, per il problema di “subst”:

Io direi di usare il metodo String#sub (o
String#sub!), per esempio:

io preferisco lasciare un placeholder:

“foo %s bar %s”

e poi usare String#%, ma ci sono casi in cui
re-interpolare una stringa può essere molto comodo
(i.e. template)

Per esempio:

str = ‘#{evil_command()}’
eval(%{“#{str}”}) # Uh-oh…

Quel e un problema con eval() in generale, perché
può svolgere comandi
casuali.

eval è evil lo so, ma usando un $SAFE-level > 0 i
problemi sono molto di meno, perché non funziona con
stringhe tainted (i.e. comandi casuali in input).


Goto 10: http://www.goto10.it
blog it: http://riffraff.blogsome.com
blog en: http://www.riffraff.info

  ___________________________________________________________

Yahoo! Answers - Got a question? Someone out there knows the answer. Try
it
now.

presento mi a questa lista - e scusate i miei problemi con l’Italiano,
perché non è la mia lingua prima :-}

Non sei l’unico - infatti ho notato diversi nomi ‘non italiani’ qua, e
la cosa mi fa piacere:-)

Comunque, per il problema di “subst”:

Io direi di usare il metodo String#sub (o String#sub!), per esempio:

Si`, alla fine ho optato per quello.

… sta funzionando, ma per me non sembra ottimale riguardo a sicurezza.
Per esempio:

Il subst di Tcl e` carino per questo:

   subst ?-nobackslashes? ?-nocommands? ?-novariables? string

Puoi dirgli di non sostituire backslashes, commandi o variabili.