@problem = ( "0 OBS", "AT LEAST", "EXTRANEOUS", "CARTESIAN", "CLOSING", "CONVERT", "DIVISION BY ZERO", "DOES NOT EXIST", "DUE TO LOOPING", "END OF MACRO", "ENDING EXECUTION", "ERROR", "ERRORABEND", "ERRORCHECK=STRICT", "EXCEED", "HANGING", "HAS 0 OBSERVATIONS", "ILLEGAL", "INCOMPLETE", "INVALID", "LOST CARD", "MATHEMAT", "MERGE STATEMENT", "MISSING", "MULTIPLE", "NOT FOUND", "NOT RESOLVED", "OBS=0", "REFERENCE", "REPEAT", "SAS CAMPUS DRIVE", "SAS SET OPTION OBS=0", "SAS WENT", "SHIFTED", "STOP", "TOO SMALL", "UNBALANCED", "UNCLOSED", "UNINITIALIZED", "UNREF", "UNRESOLVED", "WARNING" ); # First way: my $code= "sub { /(" . join ")/i || /(", map {"\Q$_\E"} @problem; $code .= ")/i }"; my $match= eval $code; die "$@" unless ref($sub) && UNIVERSAL::isa($sub,"CODE"); while(<>) { if( &$match() ) { print "line $.: problem: $1\n$_\n"; } } # Second way: while(<>) { my $up= upcase $_; foreach my $p ( @problem ) { if( 0 <= index($up,$p) ) { print "line $.: problem: $p\n$_\n"; last; } } }