Hi,
I have a string
s = “$DIR/test/$FILE”
Is there an easy way to expand this with the defined environment
variables?
I can always write a quick parser, but I was wondering maybe this
already exists?
Thanks
ds
Hi,
I have a string
s = “$DIR/test/$FILE”
Is there an easy way to expand this with the defined environment
variables?
I can always write a quick parser, but I was wondering maybe this
already exists?
Thanks
ds
On [Tue, 03.03.2009 23:28], Daniel S. wrote:
Hi,
I have a string
s = “$DIR/test/$FILE”Is there an easy way to expand this with the defined environment
variables?
What do you mean by environment variables? The stuff in ENV, or the
constants like FILE or simply global variables?
Dominik H. wrote:
On [Tue, 03.03.2009 23:28], Daniel S. wrote:
Hi,
I have a string
s = “$DIR/test/$FILE”Is there an easy way to expand this with the defined environment
variables?
What do you mean by environment variables? The stuff in ENV, or the
constants like FILE or simply global variables?
I mean the stuff in ENV.
SHELL:
export DIR=x
export FILE=y.z
RUBY:
I’d like to know the easiest way from
s = “$DIR/test/$FILE”
to
s = “x/test/y.z”
On [Tue, 03.03.2009 23:58], Daniel S. wrote:
constants like FILE or simply global variables?
s = “x/test/y.z”
| >>> DIR=x FILE=y.z irb
| >> s = “$DIR/test/$FILE”.gsub(/$\w+/) {|m| ENV[m[1…-1]]}
| => “x/test/y.z”
Thats how I would do it.
Dominik H. wrote:
| >>> DIR=x FILE=y.z irb
| >> s = “$DIR/test/$FILE”.gsub(/$\w+/) {|m| ENV[m[1…-1]]}
| => “x/test/y.z”Thats how I would do it.
Perfect, thanks. I sometimes have a hard time with those efficient
one-liners. It’s all so cryptic.
Dominik H. wrote:
On [Tue, 03.03.2009 23:58], Daniel S. wrote:
constants like FILE or simply global variables?
s = “x/test/y.z”| >>> DIR=x FILE=y.z irb
| >> s = “$DIR/test/$FILE”.gsub(/$\w+/) {|m| ENV[m[1…-1]]}
| => “x/test/y.z”Thats how I would do it.
Or: s = “$DIR/test/$FILE”.gsub(/$(\w+)/) { ENV[$1] }
On [Wed, 04.03.2009 00:16], Daniel S. wrote:
Perfect, thanks. I sometimes have a hard time with those efficient
one-liners. It’s all so cryptic.
Well, the only really cryptic thing about this one is the regexp, but
thats just a matter of learning regular expressions. And well, the
rest are basic ruby idioms/features like blocks. Comes time comes
knowledge, you will get used to those one-liners
On [Wed, 04.03.2009 00:46], Brian C. wrote:
Thats how I would do it.
Or: s = “$DIR/test/$FILE”.gsub(/$(\w+)/) { ENV[$1] }
Probably depends on whether you like global variables or not. It is
definitely shorter/more readable and I actually didn’t know if gsub
sets $1.
Dominik H. wrote:
On [Wed, 04.03.2009 00:16], Daniel S. wrote:
Perfect, thanks. I sometimes have a hard time with those efficient
one-liners. It’s all so cryptic.Well, the only really cryptic thing about this one is the regexp, but
thats just a matter of learning regular expressions. And well, the
rest are basic ruby idioms/features like blocks. Comes time comes
knowledge, you will get used to those one-liners
That is true. I’m used to the old-fashioned programming of C, assembly
and such. There, things go with baby-steps, you do one little thing at a
time.
All of a sudden with perl/ruby and such you can do tons of stuff with
few lines. My brain is not wired for this. I have a hard time forming a
ruby-worthy solution around a problem, as I’m always falling back to C’s
small step way of thinking. But you’re right, comes time comes
knowledge.
On Mar 3, 2009, at 10:50 AM, Dominik H. wrote:
Or: s = “$DIR/test/$FILE”.gsub(/$(\w+)/) { ENV[$1] }
Probably depends on whether you like global variables or not. It is
definitely shorter/more readable and I actually didn’t know if gsub
sets $1.
$1 isn’t a true global variable. It is a per-thread variable. It
still is a bit ‘magic’ for many people’s tastes but it isn’t as bad
as a true global.
Gary W.
On 03.03.2009 15:58, Daniel S. wrote:
constants like FILE or simply global variables?
s = “x/test/y.z”
Just wondering: is there anything that would prevent doing this:
s = “#{ENV[“DIR”]/test/#{ENV[“FILE”]}”
or even
s = File.join ENV[“DIR”], “test”, ENV[“FILE”]
? In other words: is the format of your original string mandatory? If
not, I’d rather choose one of the other approaches.
Kind regards
robert
On Tue, Mar 3, 2009 at 11:30 AM, Gary W. [email protected] wrote:
$1 isn’t a true global variable. It is a per-thread variable. It
still is a bit ‘magic’ for many people’s tastes but it isn’t as bad
as a true global.
Actually its really a frame local variable. heres a bit of artificial
code
which illustrates this:
def m1(string)
string.scan(/(ab|ac)/) {|m|
puts “in m1 $1 is #{$1}”
result = m2($1)
puts “result is #{result}, $1 is #{$1}”
}
end
def m2(string)
“z#{string}”.scan(/(za)/) {|m|
puts “in m2 $1 is #{$1}”
$1
}
end
m1(“abcac”) # => “abcac”
–
Rick DeNatale
Blog: http://talklikeaduck.denhaven2.com/
Twitter: http://twitter.com/RickDeNatale
WWR: http://www.workingwithrails.com/person/9021-rick-denatale
LinkedIn: http://www.linkedin.com/in/rickdenatale
From: Daniel S. [mailto:[email protected]]
if we are careful w constants (wc we should), we can do,
s = “DIR/test/FILE”.gsub(/[A-Z]+/) {|m| ENV[m]}
(ok, ok, you guessed it, i hate dollar notations =)
kind regards -botp
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs