[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Dir.glob time of evaluation

unbewusst.sein

4/5/2007 1:05:00 PM


if i do :

Dir.glob(".*xhtml"){|f|
fo=f.gsub(/(.*)\.xhtml$/,'\1_orig.xhtml')
if <the file has to be updated>
`mv "#{f}" "#{fo}"`
File.open("#{f}",'w').puts <something updated>
# c is true when we want to clean up orig files
`rm -f "#{fo}"` if c
end
}

i got an error like :
/Users/yt/bin/set_xhtml_date:58:in `ftype': No such file or directory -
/Users/yt/Sites/Events/event_listener_orig.xhtml (Errno::ENOENT)

i think this is because Dir.glob "sees" the saved file fo
(/Users/yt/Sites/Events/event_listener_orig.xhtml in this case)
before it has been removed with "`rm -f "#{fo}"`"

then i changed my script to :

fl=Dir.glob(".*xhtml")
fl.each{<same as before>}

then, because fl is evaluated before any added *_orig.xhtml file i don't
get anymore this error...

am i right or dreaming ????

--
Une Bévue
2 Answers

Ara.T.Howard

4/5/2007 3:05:00 PM

0

unbewusst.sein

4/5/2007 5:51:00 PM

0

<ara.t.howard@noaa.gov> wrote:

> > am i right or dreaming ????
>
> you are not dreaming.

fine thanks a lot !

>
> you're also crazy for shelling out to do the moving and removing:
>
> require 'fileutils'
>
> FileUtils.mv f, fo
> FileUtils.rm_rf fo if c

oh, i see may be the prob comes only from my shelling ?
I'll change asap this bad habit coming from zsh ))

> also, you are leaving open file handles all over the place with this line
>
> > File.open("#{f}",'w').puts <something updated>
>
> you should use
>
> open(f, 'w'){|fd| fd.puts <something updated>}
>
> to ensure that each file opened is also closed

i thought, wrongly i presume, File.open() did also the closing )))

>
> regards.

best,
--
Une Bévue