On Mar 14, 2006, at 3:03 PM, Pavel Smerk wrote:

> Hi, I'm new to this language and as I'm Perl user, some things  
> seems strange to me:
>
> = %w{a b} produces ['a', 'b']. Is there some similarily easy way  
> for {'a' => 'b'}? Or, can I transform an array to some "list"? I  
> can use Hash['a', 'b'], but not Hash[%w{...}], because I cannot  
> generate a list, only an array.

You are looking for the "splat" operator:

 >> Hash[*%w{a b}]
=> {"a"=>"b"}

> = how can I do 'perlish' a[1] <=> b[1] || a[2] <=> b[2] if I want  
> compare a and b accordind to some my own rules, i.e. if a[1] == b 
> [2], "return" a[2] <=> b[2]? In Ruby this is not possible, because  
> 0 is true.

We use sort_by() for that:

 >> %w{one two three}.sort_by { |str| [-str.length, str] }
=> ["three", "one", "two"]

> = can I somehow make ruby produce warnings on 1 == '1' (number ==  
> string) like comparisons? In Perl true, in Ruby false. Many my  
> mistakes are of this kind and as these values seems same on  
> output. ;-)

Hmm, you could redefine ==(), but you don't want to do that, trust  
me.  ;)  The transition phase will pass in time...

> = why I can use {|...| ...} as argument for map, each etc., but I  
> cannot write foo = {|...| ...}, though I can write bar = [...] or  
> bar = {...}?

You can use lambda() for this:

proc_object = lambda { |...| ... }

James Edward Gray II