typedef enum {VAL0, VAL1, VAL2, VAL3, VAL4} val_e;
typedef uvm_enum_wrapper#(val_e) uvm_vt;

module top();
  val_e vt;
  string str;
  val_e vt_q[$];
  string str_q[$];
  
  initial begin
    #5;
    if ($value$plusargs("VAL_E=%0s", str)) begin
      `uvm_info("top", $sformatf("str get from command line:%s", str), UVM_LOW)
            
      uvm_split_string(str, ",", str_q);
      foreach (str_q[i]) begin
        `uvm_info("top", $sformatf("str_q[%0d]:%s", i, str_q[i]), UVM_LOW)
      end
      
      foreach (str_q[i]) begin
        if(!(uvm_vt::from_name(str_q[i], vt) )) begin
          `uvm_error("top", $sformatf("Wrong enum value passed from command line"))
        end
        else begin
          `uvm_info("top", $sformatf("enum name:%s", vt.name()), UVM_LOW)
          vt_q.push_back(vt);
        end
      end
      `uvm_info("top", $sformatf("Number of enum passed from command line:%0d", vt_q.size()), UVM_LOW)
      `uvm_info("top", $sformatf("enum queue:%p", vt_q), UVM_LOW)
    end
    else begin
      `uvm_info("top", $sformatf("enum value not passed from command line"), UVM_LOW)
    end
  end
endmodule : top

//Simulation command:
// ./simv +VAL_E=VAL1,VAL4
//Output:
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(13) @ 5: reporter [top] str get from command line:VAL1,VAL4
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(17) @ 5: reporter [top] str_q[0]:VAL1
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(17) @ 5: reporter [top] str_q[1]:VAL4
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(25) @ 5: reporter [top] enum name:VAL1
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(25) @ 5: reporter [top] enum name:VAL4
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(29) @ 5: reporter [top] Number of enum passed from command line:2
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(30) @ 5: reporter [top] enum queue:'{VAL1, VAL4}

//Simulation command:
// ./simv +VAL_E=VAL1,VAL5
//Output:
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(13) @ 5: reporter [top] str get from command line:VAL1,VAL5
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(17) @ 5: reporter [top] str_q[0]:VAL1
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(17) @ 5: reporter [top] str_q[1]:VAL5
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(25) @ 5: reporter [top] enum name:VAL1
// UVM_ERROR pass_multi_enum_from_cmd_uvm1p2.sv(22) @ 5: reporter [top] Wrong enum value passed from command line
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(29) @ 5: reporter [top] Number of enum passed from command line:1
// UVM_INFO pass_multi_enum_from_cmd_uvm1p2.sv(30) @ 5: reporter [top] enum queue:'{VAL1}