From: ptkwt@... (Phil Tomson) Date: 2004-01-31T16:54:55+09:00 Subject: flip flop operator and assignment I'm working on the pattern matching section for http://pleac.sourceforge.net/pleac_ruby/t1.html (an attempt to duplicate the Perl Cookbook for several languages including Ruby). The Perl code that needs to be duplicated in Ruby is: while (<>) { $in_header = 1 .. /^$/; $in_body = /^$/ .. eof(); } In Ruby first I tried: File.open("filename"){|f| f.each_line {|l| in_header = $.==1 .. l=~/^$/ in_body = l=~/^$/ .. f.eof puts "in_header: #{l}" if in_header puts "in_body: #{l}" if in_body } } But that give the following error: ArgumentError: bad value for range However, when I changed it to use the ternary operator, like so: File.open("filename"){|f| f.each_line {|l| in_header = $.==1 .. l=~/^$/ ? true : false in_body = l=~/^$/ .. f.eof ? true : false puts "in_header: #{l}" if in_header puts "in_body: #{l}" if in_body } } It then works. What gives? It seems that the flip/flop operator is evaluating to true or false, why can't I just assign that value to in_header or in_body? Phil