https://git.spwbk.site/swatson/name-gen/raw/master/name_gen.pl
___________________________________
#!/usr/bin/perl

use strict;
use warnings;

# Read in strings from a file and generate
# an interesting song/album/artist name

# File to get strings from
my $seed_file = $ARGV[0];
my @data = split("\n", `cat $seed_file`);

# Length of random name (in words)
my $length = int(1 + rand(4 - 1));

my @words;

sub word_from_seed() {
       my $word = $data[ rand @data ];
       chomp $word;
       return $word;
}

sub get_word {
       my $tmp_word = word_from_seed();
       chomp $tmp_word;
       my $final = "";
       if ( $tmp_word =~ m/ / ) {
               my @strings = split(" ", $tmp_word);
               my $string = $strings[ rand @strings ];
               $final = $string;
       } elsif ( $tmp_word =~ m/\./ ) {
               my @strings = split(".", $tmp_word);
               my $string = $strings[ rand @strings ];
               $final = $string;
       } else {
               $final = $tmp_word;
       }

       # Chance to splice
       my $flip = 1 + int(rand(2));
       if ( $flip == 1 || $length == 1 ) {
               # Get word, take the first 3 chars,
               # save in $splice_word
               my $splice_word = word_from_seed();
               if ( length $splice_word >= 3 ) {
                       if ( $splice_word =~ m/(^.{3})/ ) {
                               $splice_word = $1;
                       }
               } else {
                       $splice_word =~ m/(^.{1})/;
                       $splice_word = $1;
               }

               # Get final word, take last $rand chars,
               # add to splice_word
               if ( ! defined $final || $final eq "" )  {
                       $final = word_from_seed();
               }
               my $splice_char_num = 1 + int(rand(length $final));
               if ( $splice_char_num < 1 ) {
                       $splice_char_num = 1;
               }

               $final =~ m/(.{$splice_char_num}$)/;
               my $splice_word_2 = $1;

               $final = $splice_word . $splice_word_2;
       }

       return $final;

}

if ( defined $ARGV[1] && $ARGV[1] eq "--gen-seed" ) {
       my @seed_words = ();
       foreach my $i ( 1..10000 ) {
               my $word = get_word();
               push(@seed_words, $word);
       }
       my $word_list = join("\n", @seed_words);
       open(my $fh, '>', "generated_seed.txt");
       print $fh $word_list;
       close $fh;
       my $sorted_list = `cat generated_seed.txt | sort | uniq`;
       open(my $fh2, '>', "generated_seed.txt");
       print $fh2 $sorted_list;
       close $fh2;

       exit 0;
}

foreach my $word ( 1..$length ) {
       push(@words, get_word());
}

my $output = "";
foreach my $word (@words){
       if ( ! defined $word || $word eq "") {
               next;
       }
       $output = $output . $word . " ";
}

print "$output\n";