I would use an array of hashes instead of a hash of hashes.
In short, creation and printing become (untested):for ( my $i = 4 ; $i <= 15 ; $i++ ) {
push @BARCODE, {'enabled',1,'type','qrcode','data',"http:web$i.url",'options','',
'width',"0.$i",'height',0.4,'hscale',0.5,'vscale',1,'x',65...