Если бы я писал сценарии, я бы, вероятно, согласился с подходом orsogufo для удобства чтения. Но если бы я набирал это на консоли в интерактивном режиме, я бы использовал конвейерный подход - меньше набирать текст, и он умещается в одну строку, например ::1001
1..30 | %{$day=$_;0..23} | %{"<hour>2009.10.$day.$_</hour>"} > tmp.txt