Białe znaki w Rubim

Chciałem, żeby zwracało wszystkie wymienione formaty plików. Ale zwracało tylko pierwszy, znaczy .jpg

Dir[src + '/*.{jpg, txt, png}'].each do |old_dest|
  new_dest = old_dest.gsub(src, dst)

  puts new_dest
  copty_with_path(old_dest, new_dest)
end

Nagłowiłem się nad tym dobre kilkanaście minut, w końcu taka zmiana pomogła:

Dir[src + '/*.{jpg,txt,png}'].each do |old_dest|

Czyli po prostu usunięcie spacji…

Pytanie dlaczego? Jak to w końcu jest z białymi znakami w Rubim. Szperam w internecie i nie mogę dojść kiedy spacje mają znaczenie, kiedy nie i dlaczego w tym przypadku działa to tak a nie inaczej. Gdzie na ten temat można poczytać coś więcej?

W tym wypadku to nie jest ruby tylko unix. Przekazujesz tak zwane glob pattern ( http://en.wikipedia.org/wiki/Glob_(programming) ) do funkcji, a te sie rządzą określonymi zasadami, m.in. spacje maja znaczenie (bo są dozwolone w nazwach pliku. Zauważ że wzorzec plików podajesz jako łańcuch ''

W tym konkretnym wypadku "/*.{jpg, txt, png} oznacza wszystkie pliki które kończą się na .jpg . txt . png (zauważ spacje). Tak więc dostajesz o co prosisz, musisz dobrze przemyśleć co chcesz. Wypada zacytować Henry’ego Spencera ‘If you lie to the compiler, it will get its revenge.’

Przy okazji Najlepiej łączyć ścieżki z wykorzystaniem File.join np. File.join(src, '*.{jpg, txt, png}') ponieważ różne platformy używają różnych separatorów katalogów (linux / windows \)