From: "Jan E." Date: 2012-03-06T04:18:06+09:00 Subject: Re: Inconsistent behaviour when working with a string Hi, The Dir.foreach iterator always begins with the current directory '.' and the parent directory '..'. If you don't skip these cases, the iterator will throw an error on the first run: If file is '.', then file[/\d{10,}/] is nil (there aren't any digits). And if fileint is nil, then fileint[0,2] will fail, because nil doesnt have a [] method. You should generally check the file parameter before processing it. Otherwise, you will always run into trouble if there are any entries that don't match the pattern. You could write Dir.foreach(".") do |file| if file =~ /access(?:_denied)?(\d+)\.merged\.log\.bz2/ timestamp = $1 year, month = timestamp[0, 2], month[2, 2] month = $months[month.to_i - 1] puts "year = #{year} month = #{month} and file was #{file}" end end You only do the processing if the file parameter matches the pattern you described earlier. While checking this, you save the timestamp substring in the first regex group (accessible by $1). You can then extract the year and month from the timestamp. Your second example I don't really understand. You now assume that the file names begin with the timestamp, although the names should begin with "access" (that's what you said earlier). While this example won't throw any errors, it will generate nonsense output like "year = ac ..." Jacques -- Posted via http://www.ruby-forum.com/.