in reply to Regex, Newline, Wilcard
Since the file you are reading seems, judging from the sample, to contain blocks separated by a double newline, you could set $/ (input record separator) to "\n\n" which would give you one <TABLE> .. </TABLE> block as one record, to process that record further as a multi-line string with a m//mg.
But you could also use a flip-flop:
my $table_name; my $sqldef; while (<>) { if (my $flipflop = /<TABLE name="([^"]+)"/ .. /<\/TABLE/) { if ($1) { $table_name = $1; next; } elsif ($flipflop =~ /E0/) { print "table name: $table_name\n"; print "sqldef: |$sqldef|\n"; $table_name = $sqldef = ''; } else { $sqldef .= $_; } } } __END__ table name: table1 sqldef: |FieldName1 VARCHAR(20) FieldName2 INT(20) FieldName3 BOOL | table name: table sqldef: |FieldName1 VARCHAR(20) FieldName2 INT(20) FieldName3 BOOL |
See ".." in perlop.
|
|---|