## Java, 546 bytes This is my first code golf submission. I am sure we could do more with it. It reads the input as the command line argument. Beer code "borrowed" from http://codegolf.stackexchange.com/questions/64198/99-bottles-of-beer?rq=1 java answer (creative commons) <!-- begin snippet: js hide: false --> class a{public static void main(String[] a){if(a[0].matches("^[HQ9\\Q+\\E]+$")){for(char c:a[0].toCharArray()){if(c=='H')p("Hello, world!");if(c=='Q')p(a[0]);if(c=='9')b();}}else{System.out.println("Source code contains invalid characters");}}static void p(String s){System.out.println(s);}static void b(){String b=" of beer",c=" on the wall",n=".\n",s;for(int i=100;i-->1;){s=" bottle"+(i>1?"s":"");p(i+s+b+c+", "+i+s+b+n+(i<2?"Go to the store and buy some more, 99":"Take one down and pass it around, "+(i-1))+" bottle"+(i!=2?"s":"")+b+c+n);}}} <!-- end snippet --> Let me know if command line args is not acceptable. This was a lot of fun!