use warnings; use strict; my @array1 = ('ux_prim_clk', 'ux_side_clk', 'ux_xtal_frm_refclk'); my @array2 = ('ccu_ux_xtal_frm_refclk_ack', 'ibbs_ux_prim_clkack', 'sbr_ux_side_clkack'); my @array1_split_2D = map { [ split /_/, $_ ] } @array1; my @array2_split_2D = map { [ split /_/, $_ ] } @array2; for my $i ( 0 .. $#array1_split_2D ) { for my $j ( 0 .. $#array2_split_2D ) { my $array2_column_size = @{$array2_split_2D[$j]}; while ( @{$array1_split_2D[$i]} != $array2_column_size ) { splice @{$array2_split_2D[$j]}, 0, 1; } } } #### use warnings; use strict; use Data::Dump; my @array1 = ('ux_prim_clk', 'ux_side_clk', 'ux_xtal_frm_refclk'); my @array2 = ('ccu_ux_xtal_frm_refclk_ack', 'ibbs_ux_prim_clkack', 'sbr_ux_side_clkack'); my @array1_split_2D = map {[split /_/,$_]} @array1; my @array2_split_2D = map {[split /_/,$_]} @array2; dd "before", \@array1_split_2D, \@array2_split_2D; for my $i (0..$#array1_split_2D) { for my $j (0..$#array2_split_2D) { dd $i, $j; dd $array1_split_2D[$i], $array2_split_2D[$j]; while ( @{$array1_split_2D[$i]} < @{$array2_split_2D[$j]} ) { splice @{$array2_split_2D[$j]}, 0, 1; } dd $array2_split_2D[$j]; } } dd "after", \@array1_split_2D, \@array2_split_2D; #### ( "before", [ ["ux", "prim", "clk"], ["ux", "side", "clk"], ["ux", "xtal", "frm", "refclk"], ], [ ["ccu", "ux", "xtal", "frm", "refclk", "ack"], ["ibbs", "ux", "prim", "clkack"], ["sbr", "ux", "side", "clkack"], ], ) (0, 0) ( ["ux", "prim", "clk"], ["ccu", "ux", "xtal", "frm", "refclk", "ack"], ) ["frm", "refclk", "ack"] (0, 1) (["ux", "prim", "clk"], ["ibbs", "ux", "prim", "clkack"]) ["ux", "prim", "clkack"] (0, 2) (["ux", "prim", "clk"], ["sbr", "ux", "side", "clkack"]) ["ux", "side", "clkack"] (1, 0) (["ux", "side", "clk"], ["frm", "refclk", "ack"]) ["frm", "refclk", "ack"] (1, 1) (["ux", "side", "clk"], ["ux", "prim", "clkack"]) ["ux", "prim", "clkack"] (1, 2) (["ux", "side", "clk"], ["ux", "side", "clkack"]) ["ux", "side", "clkack"] (2, 0) (["ux", "xtal", "frm", "refclk"], ["frm", "refclk", "ack"]) ["frm", "refclk", "ack"] (2, 1) (["ux", "xtal", "frm", "refclk"], ["ux", "prim", "clkack"]) ["ux", "prim", "clkack"] (2, 2) (["ux", "xtal", "frm", "refclk"], ["ux", "side", "clkack"]) ["ux", "side", "clkack"] ( "after", [ ["ux", "prim", "clk"], ["ux", "side", "clk"], ["ux", "xtal", "frm", "refclk"], ], [ ["frm", "refclk", "ack"], ["ux", "prim", "clkack"], ["ux", "side", "clkack"], ], ) #### #!/usr/bin/env perl use warnings; use strict; use String::LCSS qw/lcss/; my @array1 = ('ux_prim_clk', 'ux_side_clk', 'ux_xtal_frm_refclk'); my @array2 = ('ccu_ux_xtal_frm_refclk_ack', 'ibbs_ux_prim_clkack', 'sbr_ux_side_clkack'); for my $one (@array1) { for my $two (@array2) { my $lcss = lcss($one, $two); printf "%-18s / %-26s -> %s\n", $one, $two, $lcss; } } __END__ ux_prim_clk / ccu_ux_xtal_frm_refclk_ack -> ux_ ux_prim_clk / ibbs_ux_prim_clkack -> ux_prim_clk ux_prim_clk / sbr_ux_side_clkack -> _clk ux_side_clk / ccu_ux_xtal_frm_refclk_ack -> ux_ ux_side_clk / ibbs_ux_prim_clkack -> _clk ux_side_clk / sbr_ux_side_clkack -> ux_side_clk ux_xtal_frm_refclk / ccu_ux_xtal_frm_refclk_ack -> ux_xtal_frm_refclk ux_xtal_frm_refclk / ibbs_ux_prim_clkack -> ux_ ux_xtal_frm_refclk / sbr_ux_side_clkack -> ux_