While ok for your example code, I generally dislike this style because:
It tends to be error-prone in that it is easy to silently ignore error returns. For example, replace warn above with a function that may return failure.
It doesn't scale well as the code is maintained. How should you change the code above, if in addition to calling warn, you want to do something else? Using a block if or block do {} construct, you simply add a new statement, a less tricky one line change that's easier to review in revision control.