in reply to Segmentation fault on concat

I'm all for dave_the_m's advice to try demonstrating the bad behavior in a minimal script. This often leads to finding a bug that you weren't looking for previously.

But apart from that, I'm wondering why you wouldn't do your string assignment some other (possibly simpler) way, such as:

my $style_file = sprintf "%s/main/%s.xsl", $$config{dir}, $$config{sty +le};
or maybe:
my $style_file = join "/", $$config{dir}, 'main', "$$config{style}.xsl +";