I can pass arguments to functions like this:

```
func 1, 2, 3

```

or I can use brackets like:

```
func(1, 2, 3)

```

Later on I learned about functions like `list.each` which I pass (not sure if this is what's really happening) a block to operate on each element:

```
list.each {|x| puts x}

```

I assumed this just passed the block as an argument to the `each` function, but this doesn't seem to be the case because:

```
list.each( {|x| puts x} )

```

does not work.

I realized this when shown:

```
5.upto(9) {|x| puts x}

```

Which doesn't make sense at all if the block is simply an argument.

What's going on here? Any resource you can point me to to help explain this, and perhaps other structure things that aren't immediately obvious?