"LC Geldenhuys" <lcgeldenhuys / hotmail.com> schrieb im Newsbeitrag news:s26430l9o2e34veibgqpc76kvvnn67ras1 / 4ax.com... > On Tue, 17 Feb 2004 18:04:00 +0900, Emmanuel Touzery > <emmanuel.touzery / wanadoo.fr> wrote: > > >LC Geldenhuys wrote: > > > >>Hi, > >> > >>I am new to Ruby. I'm trying to get some Ruby scripts going to manage > >>or CVS log message emails. (I haven't written them myself, got them > >>from the web.) > >> > >>I get: > >>/home/cvs/repository/CVSROOT/commitinfo.rb:26:in `tr_s!': can't modify > >>frozen string (TypeError) > >> from /home/cvs/repository/CVSROOT/commitinfo.rb:26 > >> > >>I've done some reading, and I suspect I understand what the frozen > >>string issue is about. The problem is, I don't see how/why this string > >>is frozen? Here is the relevant code snippet: > >> > >>----------------------------------- > >>if ARGV.size < 4 > >> puts "Usage: #{$0} CVSROOT USER modulepath file1 [file2...]" > >> exit 1 # No way! > >>end > >> > >>$cvsroot, $cvsuser, $modulepath, *$cvsfiles = *ARGV > >> > >>$cvsroot.tr_s!('/', '/') > >>$modulepath.tr_s!('/', '/') > >>----------------------------------- > >> > >>The two lines using 'tr_s!' causes the problem, but I don't see > >>how/why $cvsroot or $modulepath is 'frozen'? Might it be due to the > >>fact that they are passed to the script, i.e. some global/local scope > >>issue? > >> > >> > >you can't modify values in ARGV. you have to copy the values. > > > > > > Thanks, the following now seems to work. > > $cvsroot_in, $cvsuser, $modulepath_in, *$cvsfiles = *ARGV > > $cvsroot = $cvsroot_in.dup > $modulepath = $modulepath_in.dup > > $cvsroot.tr_s!('/', '/') > $modulepath.tr_s!('/', '/') Why don't you just do $cvsroot_in, $cvsuser, $modulepath_in, *$cvsfiles = *ARGV $cvsroot.tr_s('/', '/') $modulepath.tr_s('/', '/') ? And, why do you use global variables at all? Regards robert