Explaining the error you saw:

2006/6/4, Sy Ali <sy1234 / gmail.com>:
> Somehow, when trying to split an element in an array, split is no
> longer working.
>
> I get this error:
>
> private method `split' called for #<Array:0xa7ad1ba4> (NoMethodError)
>
> I can't show the code which generates the array, but I can reproduce
> the error with something simple like this:
>
> puts ["a\nb", "c"].split("\n")

Your problem here is that you call Kernel.split which is private
because it's intended to be used like this:

irb(main):009:0> $_="foo\nbar"; split /\n/
=> ["foo", "bar"]

You can find that out like this:

irb(main):001:0> [].method :split
=> #<Method: Array(Kernel)#split>

This is typically used in command line one liners

ruby -n -e 'puts split(/foo/)' some_file

> However, imagine if you would that code like this could generate the
> same private method error.
>
> array = ["a\nb", "c"]
> puts array[0].split("\n")
>
> (where 'array[0]' is an element in a slightly complex array)

No, because now you are calling String#split which is actually public.

irb(main):011:0> "foo\nbar".split /\n/
=> ["foo", "bar"]

Here you can see that it's a different method:

irb(main):002:0> "".method :split
=> #<Method: String#split>

> Why can't I use split with an element in my array?  What's going on here?
>
> I can do { puts array[0].inspect } and everything is normal..
>
>
> My goal is to convert an array which has strings of varying sizes (one
> or more lines) into an array where each element has just one line of
> text.  Maybe there's a better way to do this and I can avoid this
> wierdness?

Solutions have been suggested already.  Here's another one that avoids
the use of flatten because that is less efficient:

irb(main):013:0> ["foo\nbar", "buz", "bat\ndos"].inject([]){|ar,s|
ar.concat(s.split(/\n/))}
=> ["foo", "bar", "buz", "bat", "dos"]

Kind regards

robert

-- 
Have a look: http://www.flickr.com/photos/fussel-foto/