use strict; use warnings; use feature 'say'; use Data::Dumper; chomp( my @lines = ); shift @lines; my @output = map { /(\S+)\s+(\S+)/; my $dir = $2 eq 'WR' ? 'wire' : 'reg'; "$dir $1" } @lines; say Dumper \@output; __END__ Description RD/WR lfxosc_bp_c_jtag WR lfxosc_pd_c_jtag WR lfxosc_i_mult_ctrl_c_jtag[0] WR lfxosc_i_mult_ctrl_c_jtag[1] WR lfxosc_i_mult_ctrl_c_jtag[2] WR lfxosc_r_ref_ctrl_c_jtag[0] WR lfxosc_r_ref_ctrl_c_jtag[1] WR lfxosc_r_ref_ctrl_c_jtag[2] WR rd_rsrv_hfxosc_jtag RD rd_rsrv_hfxosc_jtag RD #### $ perl 1196402.pl $VAR1 = [ 'wire lfxosc_bp_c_jtag', 'wire lfxosc_pd_c_jtag', 'wire lfxosc_i_mult_ctrl_c_jtag[0]', 'wire lfxosc_i_mult_ctrl_c_jtag[1]', 'wire lfxosc_i_mult_ctrl_c_jtag[2]', 'wire lfxosc_r_ref_ctrl_c_jtag[0]', 'wire lfxosc_r_ref_ctrl_c_jtag[1]', 'wire lfxosc_r_ref_ctrl_c_jtag[2]', 'reg rd_rsrv_hfxosc_jtag', 'reg rd_rsrv_hfxosc_jtag' ];