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!('/', '/')

Cheers,
  Lourens