Thanks. If I use strict with this script, it gets stuck in some kind of infinite loop.
I'm still having a problem with this code, but its behaving differently now:
The second matching if statement returns 1 for every $file except cqa_cqa_testcase_allpass.output and cqa_cqa_testcase_allfail.output.
What I am trying to do is create a new array from @files, filtering the elements to contain only those which are found in the $ModNameList string.
Using this string and array:
my $ModNameList = ",cqa_16k_otp_array_a.output,cqa_4x4k_otp_array_b.ou
+tput,cqa_BOAC_TEST_1.output,cqa_IPA_WLR_01_1P0.output,cqa_IPA_WLR_02_
+1P0.output,cqa_IPA_WLR_03_1P0.output,cqa_IPA_WLR_04_1P0.output,cqa_IP
+A_WLR_05_1P0.output,cqa_IPA_WLR_06_1P0.output,cqa_ac_1.output,cqa_ac_
+10.output,cqa_ac_11.output,cqa_ac_12.output,cqa_ac_13.output,cqa_ac_1
+4.output,cqa_ac_15.output,cqa_ac_16.output,cqa_ac_2.output,cqa_ac_3.o
+utput,cqa_ac_4.output,cqa_ac_5.output,cqa_ac_6.output,cqa_ac_7.output
+,cqa_ac_8.output,cqa_ac_9.output,cqa_antenna_m1tn.output,cqa_antenna_
+m2tn.output,cqa_antenna_nmos_dea_hvg.output,cqa_antenna_nmos_dea_lvg.
+output,cqa_antenna_npn.output,cqa_antenna_pmos_dea_hvg.output,cqa_ant
+enna_pmos_dea_lvg.output,cqa_antenna_pmos_thin_gate.output,cqa_antenn
+a_pnp.output,cqa_antenna_tin_ply.output,cqa_asetsafsda.output,cqa_bip
+_mismatch.output,cqa_bjt_singles.output,cqa_bjtmtch_ctchn_1.output,cq
+a_bjtmtch_ctchn_10.output,cqa_bjtmtch_ctchn_11.output,cqa_bjtmtch_ctc
+hn_12.output,cqa_bjtmtch_ctchn_2.output,cqa_bjtmtch_ctchn_3.output,cq
+a_bjtmtch_ctchn_4.output,cqa_bjtmtch_ctchn_5.output,cqa_bjtmtch_ctchn
+_6.output,cqa_bjtmtch_ctchn_7.output,cqa_cqa_testcase_allfail.output,
+cqa_cqa_testcase_allpass.output,cqa_ctop_a.output,cqa_ctop_b.output,c
+qa_ctopm1_a.output,cqa_ctopm1_b.output,cqa_ctopm2_a.output,cqa_ctopm2
+_b.output,";
my @files = (cqa_16k_otp_array_a.output","cqa_4x4k_otp_array_b.output"
+,"cqa_BOAC_TEST_1.output","cqa_IPA_WLR_01_1P0.output","cqa_IPA_WLR_02
+_1P0.output","cqa_IPA_WLR_03_1P0.output","cqa_IPA_WLR_04_1P0.output",
+"cqa_IPA_WLR_05_1P0.output","cqa_IPA_WLR_06_1P0.output","cqa_ac_1.out
+put","cqa_ac_10.output","cqa_ac_11.output","cqa_ac_12.output","cqa_ac
+_13.output","cqa_ac_14.output","cqa_ac_15.output","cqa_ac_16.output",
+"cqa_ac_2.output","cqa_ac_3.output","cqa_ac_4.output","cqa_ac_5.outpu
+t","cqa_ac_6.output","cqa_ac_7.output","cqa_ac_8.output","cqa_ac_9.ou
+tput","cqa_antenna_m1tn.output","cqa_antenna_m2tn.output","cqa_antenn
+a_nmos_dea_hvg.output","cqa_antenna_nmos_dea_lvg.output","cqa_antenna
+_npn.output","cqa_antenna_pmos_dea_hvg.output","cqa_antenna_pmos_dea_
+lvg.output","cqa_antenna_pmos_thin_gate.output","cqa_antenna_pnp.outp
+ut","cqa_antenna_tin_ply.output","cqa_asetsafsda.output","cqa_bip_mis
+match.output","cqa_bjt_singles.output","cqa_bjtmtch_ctchn_1.output","
+cqa_bjtmtch_ctchn_10.output","cqa_bjtmtch_ctchn_11.output","cqa_bjtmt
+ch_ctchn_12.output","cqa_bjtmtch_ctchn_2.output","cqa_bjtmtch_ctchn_3
+.output","cqa_bjtmtch_ctchn_4.output","cqa_bjtmtch_ctchn_5.output","c
+qa_bjtmtch_ctchn_6.output","cqa_bjtmtch_ctchn_7.output","cqa_cqa_test
+case_allfail.output","cqa_cqa_testcase_allpass.output","cqa_ctop_a.ou
+tput","cqa_ctop_b.output","cqa_ctopm1_a.output","cqa_ctopm1_b.output"
+,"cqa_ctopm2_a.output","cqa_ctopm2_b.output);
This code creates @cqa_status with all the files except cqa_cqa_testcase_allpass.output and cqa_cqa_testcase_allfail.output.
my @cqa_status;
foreach my $file ( @files ) {
if($file =~ /^cqa_(.*)\.output$/i) {
my $name = $file;
$name =~ s/^cqa_//i;
$name =~ s/\.output$//i;
if( $ModNameList =~ /^(.*),$name,(.*)$/ ) {
print "Matched $name:" . ($ModNameList =~ /^(.*),$name,(.*
+)$/) . "<br>\n";
push(@cqa_status, $file);
}
}
}
Substituting if( $ModNameList =~ /^(.*),$name,(.*)$/ ) { for if( !($ModNameList =~ /^(.*),$name,(.*)$/) ) { does the opposite
and creates @cqa_status only containing cqa_cqa_testcase_allpass.output and cqa_cqa_testcase_allfail.output.
my @cqa_status;
foreach my $file ( @files ) {
if($file =~ /^cqa_(.*)\.output$/i) {
my $name = $file;
$name =~ s/^cqa_//i;
$name =~ s/\.output$//i;
if( $ModNameList =~ /^(.*),$name,(.*)$/ ) {
print "Matched $name:" . ($ModNameList =~ /^(.*),$name,(.*
+)$/) . "<br>\n";
push(@cqa_status, $file);
}
}
}
I thought I understood regex, but this doesn't make sense to me.
Right now, it should match every $file from $ModNameList and if @files grows
it should filter @files to $ModNameList so scalar(@files) should always be the
same number at the end of this code.
|