The main difference I'm aware of is that `instance_eval`, while it does change `self` inside the proc, it also passes `self` as an argument into the given block.

That's a problem for anyone using the stabby proc syntax (`->{}`) because it does strict argument checking. As in:
```
ArgumentError: wrong number of arguments (1 for 0)
```