From: Matthew Smillie Date: 2005-11-15T22:28:06+09:00 Subject: unexpected behaviour in Pathname? I'm writing a quick script to selectively process some files, and I found a bit of odd behaviour using Pathname#each and #each_entry, which is best illustrated, rather than explained: irb(main):001:0> require 'pathname' => true irb(main):002:0> p = Pathname.new("/home/matt/test") => # irb(main):003:0> p.entries.each{ |q| irb(main):004:1* puts "operating on: #{q.dirname}/#{q.basename}" irb(main):005:1> } operating on: ./. operating on: ./.. operating on: ./a operating on: ./b operating on: ./c Now, the problem that results is that in the block, I can't do q.read reliably (or indeed q.anything), because it's looking for q relative to the current directory, when surely it should be looking relative to p. Apart from files not being found if you're not in the correct directory, this could lead to more difficult-to-detect problems if you have a structure like the following and run the script in a directory which has identically-named files to the intended target, for instance: /home/matt/project/training/{1, 2, 3, 4, etc} /home/matt/project/test/{1, 2, 3, 4, etc} Since even when the directory to be processed is given as an absolute pathname, its subdirectories are treated as relative pathnames. I realise that I can solve this by doing (p + q).read inside the block, but surely this isn't the desired behaviour of Pathname#each? thanks, matthew smillie.