my %langTags=( perl => { HEAD => [ '#!/usr/bin/perl', ], DEFAULT => [ 'use strict;', 'use warnings;', ], cgi => [ 'use CGI::Carp qw( fatalsToBrowser );', 'use CGI qw( -nosticky -compile -no_debug -private_tempfiles -newstyle_urls );', ], moose => [ 'use Moose;' ], # ... }, bash => { HEAD => [ '#!/bin/bash', ], cgi => [ 'source /usr/local/lib/bash/bashcgi-lib.bash', ], csv => [ 'source /usr/local/lib/bash/csv-lib.bash', ], ourlibs => [ 'source /usr/local/lib/bash/foo-lib.bash', 'source /usr/local/lib/bash/bar-lib.bash', ], # ... }, c => { DEFAULT => [ '#include ', '#include ', '#include ', ], # ... }, # ... ); #### my %extToLang=( pl => 'perl', pm => 'perl', c => 'c', h => 'c', sh => 'bash', bash => 'bash', ); my $filename; my $lang; # setup $filename and perhaps also $lang if (!$lang and ($filename=~/\.([^.]+)$/) { $lang=$extToLang{$1}; } $lang or die "Missing language parameter"; #### use List::MoreUtils qw ( uniq ); my @allTags=uniq map { keys %$_ } values %langTags;